在另一个问题上,Jerry Coffin指出了以下几点:
它(可能)与您的问题并不真正相关,但
while (!feof(fileptr)){
几乎是一个有保证的错误。
我想我会开始一个单独的问题,因为该评论有点离题。有人可以向我解释一下吗?这是我之前用纯 C 语言编写的第一个程序。
在另一个问题上,Jerry Coffin指出了以下几点:
它(可能)与您的问题并不真正相关,但
while (!feof(fileptr)){
几乎是一个有保证的错误。
我想我会开始一个单独的问题,因为该评论有点离题。有人可以向我解释一下吗?这是我之前用纯 C 语言编写的第一个程序。
这个声明的原因是feof
当到达文件末尾时它仍然(最初)是假的——它只有在第一次尝试读取文件末尾失败后才变为真。
因此
char mychar;
while(!feof(fileptr))
{
fread(&mychar, sizeof(char), 1, fileptr);
fprintf(stderr, "The char is '%c'.\n", mychar);
}
将处理一个字符太多。
正确的方法是检查fread
(或您用来读取的任何函数)的返回值,或者,在执行读取的函数feof
之后调用。例如:
char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
fprintf(stderr, "The char is '%c'.\n", mychar);
谷歌发现这个:http ://www.drpaulcarter.com/cs/common-c-errors.php#4.2
它说“作者还没有看到任何学生正确使用 feof() 函数!”
总而言之,C 文件函数喜欢fread
并fwrite
返回您<blink>不应该忽略</blink>的状态值。feof
在马已经逃跑之后,检查马厩门的价值是其中之一。
C 常见问题解答列表有一个答案以及许多其他此类常见问题的答案:
在 C 中,只有在输入例程尝试读取但失败后才指示文件结束。