在 C/C++ 中,getc()在到达文件末尾时返回 EOF。getc() 失败时也会返回 EOF。因此,仅将 getc() 返回的值与 EOF 进行比较不足以检查文件的实际结尾。为了解决这个问题,C 提供了feof(),它仅在到达文件末尾时返回非零值,否则返回 0。
例如,考虑以下 C 程序在屏幕上打印文件test.txt的内容。在程序中,getc() 的返回值首先与 EOF 进行比较,然后再使用 feof() 进行检查。通过进行此检查,我们确保程序仅在到达文件结尾时才打印“到达文件结尾”。如果 getc() 由于任何其他原因返回 EOF,则程序将打印“出问题了”
#include <stdio.h>
int main()
{
FILE *fp = fopen("test.txt", "r");
int ch = getc(fp);
while (ch != EOF)
{
/* display contents of file on screen */
putchar(ch);
ch = getc(fp);
}
if (feof(fp))
printf("n End of file reached.");
else
printf("n Something went wrong.");
fclose(fp);
getchar();
return 0;
}