feof是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0;站在光标所在位置,向后看还有没有字符,如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。
EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。这个定义的意思是,文档的结尾都有一个隐藏字符”EOF”,当程序读取它的时候,就会知道文件已经到达结尾。通常使用while循环加EOF判断作为读取结束的标志。EOF 的值通常为 -1,但它依系统有所不同。
对于文件来说,无论是空文件,还是存有信息的文件,当文件被打开,光标处于默认的开头时,光标后都有信息,这时候调用feof()来查看光标后是否还有内容,就没意义。因此,先使用getc(),从文件中读取一个字符,让光标向后移动一个字符。这时空文件的光标就已经移动到EOF的后面,这时使用feof()就会返回1了。这才是feof()的正确用法。但在读取文件时,一定要将光标回到文件的开头,因为之前判断文件是否为空时,将光标向前移动了一位,必须要将光标恢复到开头,这样才能保证文件的正常读取。
例如:
#include<stdio.h>
int main(void)
{
FILE *fp;
p = fopen("TEST.txt", "r");
getc(fp);
if (feof(fp))
{
printf("文件为空");
}
else
{
rewind(fp);
int pr;
fscanf(fp,"%d",&pr);
printf("%d", pr);
}
return 0;
}