3

另一个问题上,Jerry Coffin指出了以下几点:

它(可能)与您的问题并不真正相关,但while (!feof(fileptr)){几乎是一个有保证的错误。

我想我会开始一个单独的问题,因为该评论有点离题。有人可以向我解释一下吗?这是我之前用纯 C 语言编写的第一个程序。

4

3 回答 3

9

这个声明的原因是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);
于 2009-10-19T12:24:49.817 回答
5

谷歌发现这个:http ://www.drpaulcarter.com/cs/common-c-errors.php#4.2

它说“作者还没有看到任何学生正确使用 feof() 函数!”

总而言之,C 文件函数喜欢freadfwrite返回您<blink>不应该忽略</blink>的状态值。feof在马已经逃跑之后,检查马厩门的价值是其中之一。

于 2009-10-19T12:20:03.930 回答
1

C 常见问题解答列表有一个答案以及许多其他此类常见问题的答案:

在 C 中,只有在输入例程尝试读取但失败后才指示文件结束。

于 2009-10-19T15:12:36.923 回答