2017-02-11 105 views
1

编写一个从文本文件中读取信息并将其写入二进制文件的程序。该文本文件包含:
名字,姓氏,ID号码和GPA。
名字和姓氏是最大长度为255的字符数组,ID是一个无符号整数,并且GPA是一个浮点数。每行之后,还有另外一行具有相同的4条信息。如何循环到文本文件的末尾并继续将信息复制到bin文件中?例如,假设每个人有4或5行,每个人都有不同的拥有新身份证号码和GPA的学生,我如何继续将它们从文本复制到二进制文件?我想我已经在循环内部有一段,但我不确定如何实现循环。我必须使用fscanf作为文本文件,并使用fwrite作为二进制文件。任何帮助赞赏。从文本文件中读取数据并写入二进制文件

unsigned char firstName[255]; 
unsigned char lastName[255]; 
unsigned int id; 
float gpa; 

fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); //read one line of the text file 
printf("%s %s %d %.1f", firstName, lastName, id, gpa); //print line information ((test)) 

printf("\n"); //newline 

//Writing information to binary file 

fwrite(firstName, strlen(firstName), 1, binfile); 
fwrite(lastName, strlen(lastName), 1, binfile); 
fwrite(&id, sizeof(int), 1, binfile); 
fwrite(&gpa, 4, 1, binfile); 

回答

1

的fscanf - “成功时,该函数返回成功读取的项目数这个计数可以匹配读数的预期数量或者少 - 即使在零匹配失败的情况下,在这种情况下。在成功读取任何数据之前输入失败,返回EOF。“

所以,你可以检查,看它是否是== EOF在while循环

while(fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa) != EOF) { 
    //Body 
} 

另外,您还可以使用feof(stdin)

while(1){ 
     fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa); 
     if (feof(textfile)) 
       break; 
     //Body 
} 

(PS:如果你不想让文件读取< 4个条目并停在那里,你可以通过用4替换EOF来做到这一点,因为fscanf的返回数也是如此)

+0

完美,谢谢。 –

+0

@minigeek考虑[是否“贪婪”问.. upvote ...](http://meta.stackoverflow.com/a/298583/2410359) – chux

+0

对不起@chux不会再这样做..有趣的事情你提到的那个问题得到了太多--ve votes.haha – minigeek