关于C/C++中while(!feof(fp))。。

来源:百度知道 编辑:UC知道 时间:2024/06/25 02:59:50
#include <stdio.h>
#include<stdlib.h>

int main()
{
int x=8848;
FILE *fp;
if((fp=fopen("test.dat","wb"))==NULL)
{
printf("write-opening ERROR!\n");
exit(1);
}
if(fwrite(&x,sizeof(int),1,fp)!=1)
{
printf("writing ERROR!\n");
exit(1);
}
fclose(fp);
if((fp=fopen("test.dat","rb"))==NULL)
{
printf("read-opening ERROR!\n");
exit(1);
}
while(!feof(fp))
{
if(fread(&x,sizeof(int),1,fp)!=1)
{
printf("reading ERROR!\n");
return 1;
}
printf("%d\n",x);
}
fclose(fp);
return 0;
}/*这个程序的运行结果为
8848
reading ERROR!
*//*为什么???*/
还有,在读文本文件时,while(!feof(fp)) putchar(fgetc(fp));总会多读一个字符,为什么??

1、因为文件再读完8848以后fp指针已经到最末尾,在进入while循环的时候才回出现reading ERROR!
2、因为一个字符串输入完毕以后,在关闭文件时系统将自动在最后加上一个“-1”字节作为文件结束的标志。在读入文件时,每读一个字符可以测试一次feof函数的值。在读完最后一个字符时候,feof函数的值仍然为0,在读如最后一个字节,也就“-1”字节的时候eof才为1,所以会多一个字符。

数据最后可能有回车之类不可见字符