2015-12-02 91 views
1

在這個節目,我寫了到使用結構的陣列的二進制文件,我試圖把它的數據到結構的另一個數組是這樣的:如何從二進制文件讀取字符串/數組和C中的int?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct rec{ 
    char cim[60]; 
    int x; 
}rec;   //my structure 



int main(){ 
    int i; 
    FILE *ptr_myfile; 
    rec ujtomb[25]; //I want to have the elements here after reading the file 
    rec tomb[25]={{"Spectre",3521}, 
     {"The Hunger Games Mockingjay Part 2",6123}, 
     {"Star Wars The Force awakens",9736}, 
     {"The Thirty Three",2342}, 
     {"The man From UNCLE",4312}, 
     {"Creed",4123}, 
     {"Inside out",6584}, 
     {"The martian",6674}, 
     {"Ant-man",7352}, 
     {"Secret in their eyes",2345}, 
     {"The night before",4758}, 
     {"Love",1586}, 
     {"Legend",8576}, 
     {"Trainwreck",4628}, 
     {"Love the Coopers",6372}, 
     {"Maze runner The scorch trials",8750}, 
     {"No escape",5793}, 
     {"Terminator genisys",8451}, 
     {"Krampus",452}, 
     {"Bridge of spies",9581}, 
     {"By the sea",7582}, 
     {"The peanuts movie",3214}, 
     {"Heist",1346}, 
     {"Spotlight",7450}, 
     {"Jurassic world",5438}};  //I listed the elements of the array 
ptr_myfile=fopen("nezettseg.bin","wb"); 
if (!ptr_myfile) 
{ 
printf("Unable to open file!"); 
return 1; 
} 
for (i=0;i<25;i++){  //here i write into nezettseg.bin 
     fwrite(&tomb[i].cim, sizeof(rec), 1, ptr_myfile); 
     fwrite(&tomb[i].x, sizeof(rec), 1, ptr_myfile); 
} 
fclose(ptr_myfile); 

    FILE* fin = fopen("nezettseg.bin", "rb"); //opening the binary file 
    for(i=0;i<25;i++){ //now I'm trying to write those movies and numbers into ujtomb 
     fread(&ujtomb, sizeof(rec), 1, ptr_myfile); 
     printf("%s %d\n", ujtomb->cim, ujtomb->x); 
    } 
    fclose(fin); 
    return 0; 
} 

我的代碼工作,但輸出看起來是這樣的:

Spectre 3521 
\301 
0 
The Hunger Games Mockingjay Part 2 6123 
\353 0 
Star Wars The Force awakens 9736 
& 0 
The Thirty Three 2342 
& 0 
The man From UNCLE 4312 
\330 0 
Creed 4123 
0 
Inside out 6584 
\270 0 
The martian 6674 
0 
Ant-man 7352 
\270 0 
Secret in their eyes 2345 
) 0 
The night before 4758 
\226 0 
Love 1586 
2 0 
Legend 8576 
Program ended with exit code: 0 

sooo基本上它寫了25行,但\數字帶有變量'cim',而0-s帶有x。 你能幫助我如何正確地把這些標題和數字ujtomb?

回答

1
for (i=0;i<25;i++){ 
    fwrite(&tomb[i].cim, sizeof(rec), 1, ptr_myfile); 
    fwrite(&tomb[i].x, sizeof(rec), 1, ptr_myfile); 
} 

是不對的。您需要使用:

for (i=0;i<25;i++){ 
    fwrite(&tomb[i], sizeof(rec), 1, ptr_myfile); 
} 

記住tomb[i]rec,不tomb[i].cimtomb[i].x

此外,

for(i=0;i<25;i++){ 
    fread(&ujtomb, sizeof(rec), 1, ptr_myfile); 
    printf("%s %d\n", ujtomb->cim, ujtomb->x); 
} 

是不對的。您需要使用:

for(i=0;i<25;i++){ 
    fread(&ujtomb[i], sizeof(rec), 1, fin); 
       ^^^^^ Missing index. ^^^^ Use the right FILE* 

    printf("%s %d\n", ujtomb[i].cim, ujtomb[i].x); 
          ^^^^   ^^^^ Use the i-th element 
} 
+0

哇,非常感謝!代碼完美無缺! – reallytitkos

相關問題