zoukankan      html  css  js  c++  java
  • 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     }           
  • 相关阅读:
    ffmpeg 日志系统av_log()
    语音识别哪家强 讯飞 搜狗 百度 阿里还是腾讯
    利用FFmpeg切割视频
    网易云音乐 抓取成功,按评论数排序
    python from import 自定义模块
    使用Fiddler调试线上JS代码
    sublime text 格式化html css 与显示函数列表
    微信硬件(四)调试工具
    微信硬件平台(三) 菜单开发
    微信硬件(三)
  • 原文地址:https://www.cnblogs.com/kingos/p/4572906.html
Copyright © 2011-2022 走看看