在another question上,Jerry Coffin指出了以下内容:
它(可能)与你的问题没有关系,但
while (!feof(fileptr)){
几乎是一个有保证的错误。
我想我会开始一个单独的问题,因为这个评论有些偏离主题。有人可以向我解释一下吗?这是我之前用C编写的第一个程序。
答案 0 :(得分:9)
这句话的原因是,当文件结束时,feof
仍然(最初)为假 - 只有在第一次尝试读取超过文件末尾的失败后才会变为真。
因此
char mychar;
while(!feof(fileptr))
{
fread(&mychar, sizeof(char), 1, fileptr);
fprintf(stderr, "The char is '%c'.\n", mychar);
}
将处理一个char太多。
正确的方法是检查fread
的返回值(或您正在阅读的任何函数),或者在函数之后调用feof
那是读书。例如:
char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
fprintf(stderr, "The char is '%c'.\n", mychar);
答案 1 :(得分:5)
Google发现:http://www.drpaulcarter.com/cs/common-c-errors.php#4.2
它说“作者还没有看到任何学生正确使用feof()函数!”
总而言之,C文件的功能如fread
和fwrite
无论如何都会返回状态值< blink>不应忽略< / blink> 。检查feof
的值是在马已经逃离之后用螺栓固定门的其中一个。
答案 2 :(得分:1)
C FAQ列表中包含answer以及许多其他此类常见问题的答案:
在C中,只有在输入例程尝试读取并失败后才会显示文件结尾。