标签:
在c语言中,判断文件结尾有两种方法,第一种是使用feof()函数,feof(fp)用于测试fp所指向的文件的当前状态是否为“文件结束”。如果是,函数则返回的是非0值(真),否则为0(假),要注意的是,feof()是先读文件在判断是不是到达文件结束,所以当使用feof()作为循环判断条件的话,就需要注意一种情况,就是当文件为空的时候,它也会读取一次文件内容然后再跳出循环,所以有可能会读取到一些不可知的内容出来。
EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCII代码值的范围是0~255,EOF的16进制代码为0xFF(十进制为-1),因此可以用EOF作为文件结束标志。但是如果文件格式为二进制文件,就不适合用EOF来判断文件到达结尾了,因为有可能文件中也存在一个数据为0xFF,这样当读取到这个数据是,就无法判断是到达文件结尾,还是读取到的是文件的内容了。
这里需要解决的就是feof()作为循环条件遇到空文件时的情况,网上找了好多,但是都没有实现,然后自己受到了点启发。想到了一个笨办法,这里贴下代码
1 void read(void) 2 { 3 int ch; 4 FILE *fp; 5 if((fp=fopen("txt.txt","rt"))==NULL) 6 { 7 printf("读取信息失败,请重试"); 8 getchar(); 9 exit(1); 10 } 11 ch=fgetc(fp); //首先从文件中读取,判断是不是文件结束符EOF 12 if(ch==EOF) 13 { 14 printf("什么都没有"); 15 fclose(fp); 16 return; //如果是直接关闭文件退出 17 } 18 rewind(fp); //这步很重要,如果判断不是,让文件内部的指针重新指向文件开头 19 while(!feof(fp)) 20 { 21 ... //正常读取文件内容 22 }
标签:
原文地址:http://www.cnblogs.com/kingos/p/4572906.html