feof()的原理
检测流上的文件结束符的函数(结束返回非0值,否则返回0);
feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空.
调用feof(),feof()会指向当前内容(包括EOF),feof()并不会让文件指针移动
当feof()检查有内容,会返回0。
通过下面代码可以发现:
int i = 0;
while(!feof(fp))
{
fread(ch,5,1,fp);
printf("%s",ch);
i++;
}
fp指向b.dat文件
下面是b.dat 文件
运行结果
b.dat 文件只有6行字符串,却输出了7行.
当feof()读取道EOF,依旧会返回非0值
解决方案
int i = 0;
while(getc(fp) && !feof(fp))
{
fseek(fp,-1L,SEEK_CUR);
fread(ch,5,1,fp);
printf("%s",ch);
i++;
}