首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于feof()函数的一个有关问题

2013-11-18 
关于feof()函数的一个问题#include stdio.hint main(int argc ,char * argv[]){int iFILE *fpif(argc

关于feof()函数的一个问题
#include <stdio.h>

int main(int argc ,char * argv[])
{
int i;
FILE *fp;
if(argc<=1)
{
printf("usage: %s file \n",argv[0]);
return 1;
}

fp=fopen(argv[1],"w+");
 fgetc(fp);
printf("%d\n",ferror(fp));

fputs("abcdefgh",fp);
fclose(fp);

fp=fopen(argv[1],"r");
fseek(fp,0,SEEK_END);

 fgetc(fp);

if(feof(fp))
printf("file end\n");

clearerr(fp);
printf("%d %d\n",ferror(fp),feof(fp));
fclose(fp);



return 0;
}

把红色的代码fget(fp)注释掉,原有的结果就会从 0 
                                                                     file end  
                                                                     0 0 
变成 0   
       0 0



其中的file end 没有了,为什么出现这样的情况? 难道feof(fp)不起作用了吗?
[解决办法]
因为feof只是返回系统的一个statment的值,它是要fgetc fgets fread等等系统调用修改的。
fseek(fp, 0, SEEK_END)后文件指针指向size,如果此时feof(fp)的话,是不会返回非0的,原因就是根本没有系统调用改变了那个statment的值。所以还是返回0,这样如果不做判断直接fgetc的话,就会获得一个-1,当然也因为这个-1系统改变了statment的值,所以

fseek(fp, 0, SEEK_END
然后
fgetc()
之后再
调用feof的时候就会返回非0

热点排行