从文本文件中读取并写入二进制文件

时间:2017-02-11 23:49:24

标签: c text io binary

编写一个程序,从文本文件中读取信息并将其写入二进制文件。文本文件包含:
名字,姓氏,身份证号码和GPA 名字和姓氏是char数组,最大长度为255,ID是unsigned int,GPA是float。在每一行之后,还有另一行具有相同的4条信息。如何循环到文本文件的末尾并继续将信息复制到bin文件中?例如,假设有4或5行,每个学生都有不同的学生,他们有新的ID号和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 个答案:

答案 0 :(得分:1)

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

因此,您可以检查在while循环中是否= = EOF

 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个条目数并在那里停止,您可以通过将EOF替换为4作为fscanf返回计数来执行此操作)