【发布时间】:2020-09-27 10:53:14
【问题描述】:
#include <stdio.h>
int main()
{
FILE *fp;
char buffer[1001];
char name[15], surname[30];
float mid1, mid2, final, avg;
fp = fopen("grades.txt", "r");
if (!fp)
{
printf("Could not open file. Program finished.");
return 0;
}
fgets(buffer, 1000, fp);
while (feof(fp) == 0)
{
sscanf(buffer, "%s%s%f%f%f", name, surname, &mid1, &mid2, &final);
printf("%s %s %f %f %f\n", name, surname, mid1, mid2, final);
fgets(buffer, 1000, fp);
}
fclose(fp);
return 0;
}
这是我的文本文件,
Ali Veli 67 80 76
Ahmet Mehmet 45 64 63
Ayse Fatma 89 98 83
一切正常,但无法读取文本文件的最后一行 在输出“Ayse Fatma 89 98 83”中它无法打印。
【问题讨论】:
-
看起来更像 C 而不是 C++。请选择一种语言。也值得一读:Why is
while ( !feof (file) )always wrong? -
谁教你使用
while(feof(fp) == 0)? -
虽然结构不好,但代码应该读取最后一行——如果数据文件末尾有换行符。如果缺少最后一个换行符,
feof()可能过早报告 EOF。建议的重组避免了一些可能的陷阱。您还可以打印您解析的行以查看在fgets()调用之后是否有换行符:printf("Line: [[%s]]\n", buffer);。但是你应该在使用buffer中的值之前检查fgets()的结果,因此重组后的版本更好(没有重复),你可以将printf()放在sscanf()之前。 -
@BatuhanGunes 很高兴发布source 的弱代码。在其他代码示例中考虑这一点。