Avatar billede niko_nielsen Nybegynder
19. april 2007 - 12:07 Der er 11 kommentarer og
1 løsning

indlæsning af data

jeg er i gang med et program som skal kunne indlæse nogle data som er gemt fra tidligere...
her er først et udsnit at min header
#define sz 4000

typedef struct{
    int in_use;
    int dato;
    char cpr[12];
    char fornavn[50];
    char efternavn[50];
    int vaegt;
    int hoejde;
    int puls;
}pat_tp;

FILE *datfil;
pat_tp pat_db[sz];

jeg bruger denne kode til at gemme
datfil = fopen("patientdata.txt", "wb");
if(datfil != NULL){
        fwrite(pat_db, sizeof(pat_db), 1, datfil);
    fclose(datfil);
    printf("Data gemt");
    break;
}
og denne til at læse den igen.
datfil = fopen("patientdata.txt", "rb");
if(datfil != NULL){
    fread(pat_db, sizeof(pat_db), 1, datfil);
    fclose(datfil);
    printf("data indlæst");
        break;
}
den kan godt gemme, men den nægter at hente dataene ind. den skriver:
ERROR: unsupported data type for sizeof() operation
ERROR: memory of array buf in fread(buf,size,count,stream) is less than the specified input stream
      at line 46 in file /media/USB DISK/uni/C programmering/eksamen/main.c

jeg er ikke helt sikker på at min fread er brugt rigtigt...
nogle som kan hjælpe?
Avatar billede segmose Nybegynder
19. april 2007 - 13:27 #1
Er dette bedre?

fwrite(pat_db, sizeof(pat_tp), sz, datfil);
fread(pat_db, sizeof(pat_tp), sz, datfil);
Avatar billede niko_nielsen Nybegynder
19. april 2007 - 15:21 #2
hmm sjovt... den kan godt indlæse dataene nu men den skriver stadig:
ERROR: unsupported data type for sizeof() operation
ERROR: memory of array buf in fread(buf,size,count,stream) is less than the specified input stream
      at line 46 in file /media/USB DISK/uni/C programmering/eksamen/main.c
Avatar billede segmose Nybegynder
20. april 2007 - 08:48 #3
Prøv at check hvor meget der blive skrevet og læst

if (sz != fwrite(pat_db, sizeof(pat_tp), sz, datfil))
  Bug();
if (sz != fread(pat_db, sizeof(pat_tp), sz, datfil))
  Bug();
Avatar billede niko_nielsen Nybegynder
20. april 2007 - 15:33 #4
Den kører lige igennem, både skriver og læser lige meget... men kommer stadig med samme fejlmeddelse.
Avatar billede segmose Nybegynder
20. april 2007 - 15:52 #5
Står hele koden i samme fil?

ERROR: unsupported data type for sizeof() operation
Jeg har ikke set denne fejl før, hvilken C/C++ køre du?

ERROR: memory of array buf in fread(buf,size,count,stream) is less than the specified input stream
      at line 46 in file /media/USB DISK/uni/C programmering/eksamen/main.c
Den skal være noget smart for at kunne regne dette ud, og så får den endda forkert resultat, med mindre der er noget data align den ikke fortæller dig.

De 2 breaks du har i dine "if" hvilken funktion har de? break bruges da kun til for, while og switch?
Avatar billede niko_nielsen Nybegynder
20. april 2007 - 16:08 #6
nej koden er delt op i flere forskellige filer...
og jeg bruger Ch til at køre mit c program...
og de to breaks er der fordi det er kun et udsnit af koden, de to funktion (indlæs/gem data) er en del af en menu hvor jeg bruger en switch...
Avatar billede bertelbrander Novice
20. april 2007 - 20:03 #7
Jeg tror ikke at fortolkeren kender pat_tp på det sted hvor du læser.
Måske mangler der ud at inkludere header-filen?
Eller har du en forward-erklæring af pat_tp?
Avatar billede niko_nielsen Nybegynder
21. april 2007 - 01:34 #8
efter hvad jeg kan se, så er da ingen af disse fejl... jeg syntes også det virker underligt at jeg sagtens kan bruge fwrite uden fejl, men ikke fread, selvom de bruges næsten samme sted...
Avatar billede bertelbrander Novice
21. april 2007 - 02:25 #9
Ja, det virker underligt, hvis det er i samme fil.

Hvis den kan lave sizeof(pat_db) når den skal skrive, hvorfor kan den så ikke når den skal læse? Koden ser ud til at være det samme.

Som en work-around kan du prøve at lave en global variabel og sætte den til sizeof(pat_db)
Avatar billede niko_nielsen Nybegynder
21. april 2007 - 14:57 #10
den bliver ved med at lave fejlen, men det gør ikke så meget for den gør det den skal. selvom jeg syntes det er lidt underligt
Avatar billede segmose Nybegynder
23. april 2007 - 09:04 #11
Prøv lige en sidste ting i tilfælde af at sizeof ikke kan lide en typedef som argument men til have en reel variable.

if (sz != fwrite(pat_db, sizeof(pat_db[0]), sz, datfil))
  Bug();
if (sz != fread(pat_db, sizeof(pat_db[0]), sz, datfil))
  Bug();
Avatar billede niko_nielsen Nybegynder
04. maj 2007 - 11:04 #12
nope det virker heller ikke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester