c 语言文本文件判断是否到达结尾的问题

在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     }           
原文地址:https://www.cnblogs.com/kingos/p/4572906.html