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     }           
  • 相关阅读:
    SVN配置文件详解
    让Linux开机运行命令
    find命令用法介绍
    关于js优化和css优化
    弹性盒布局、头尾固定中间部分自适应布局
    css样式重置(初始化)收集
    动态嵌套form,使用Stimulus Js库(前后端不分离)
    给Mac的Dictionary添加其他原装词典
    使用rvm关联ruby版本和rails版本。
    Rails6.0 Beta版本1: ActionText的简单使用
  • 原文地址:https://www.cnblogs.com/kingos/p/4572906.html
Copyright © 2011-2022 走看看