博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之EOF()
阅读量:6644 次
发布时间:2019-06-25

本文共 1059 字,大约阅读时间需要 3 分钟。

    fstream流的eof()推断有点不合常理

    按常理逻辑来说,假设到了文件末尾的话,eof()应该返回真,可是,C++输入输出流怎样知道是否到末尾了呢?

    原来依据的是:假设fin>>不能再读入数据了,才发现到了文件结尾,这时才给流设定文件结尾的标志,此后调用eof()时,才返回真。

    如果

    find>>x; //此时文件刚好读完最后一个数据(将其保存在x中)

    可是,这时fin.eof()仍为假,由于 fin流的标志eofbit是False,fin流此时觉得文件还没有到末尾,仅仅有当流再次读写时 fin>>x ,发现已无可读写数据,此时流才知道到达了结尾,这时才将标志eofbit改动为True,此时流才知道文件到了末尾。

    也就是说,eof在读取完最后一个数据后,仍是False,当再次试图读一个数据时,因为发现没数据可读了,才知道到末尾了,此时才改动标志,eof变为True。

    下面样例:

    ifstream fin("D://line.txt");

    ofstream fout("D://T_line.txt", ios::trunc);

 

    list<tag_Point> test_list;

    tag_Point test;

 

    whlie( !fin.eof() )

    {

        fin>>test.x;

        fin>>test.y;

        fin>>test.z;

 

        test_list.push_back(test);

    }

 

    fin.close();

 

    在执行时,发现test_list中的数据比文本中的数据多一行,也就是文本中最后一行的数据写了两遍。

    终于找到了一个解决方法,如今把上面的代码改为例如以下:

    #include <iostream>

    #include <stdlib.h>

    #include <fstream>

 

    int main()

    {

        char c = 'c';

        ifstream FILE("test.txt");

        if(FILE.peek() == EOF)

        {

            cout<<"文件是空的"<<endl;

            exit(1);

        }        

        while(FILE.peek() != EOF)

        {

             FILE.get(c);

             cout<<c;

 

        }

        system("pause");

        return 0;

    }

 

    主要是把eof()改为peek() == EOF来判别,当中peek()是取文件当前指针,EOF是文件尾尾标符,它的值为-1,所以採用这样的方法就解决上面eof()的问题了。这样的方法也能够用在读写二进制文件里。

 

 

文章出处:

              

 

转载地址:http://qxevo.baihongyu.com/

你可能感兴趣的文章
用幻灯片做完整的“一站到底”抢答器
查看>>
创新创新再创新(3)
查看>>
一个简单的mysql服务检测启动脚本
查看>>
linux 下搭建BugFree
查看>>
DT02_设计思维的要素_假定(Hypothesis)
查看>>
Nginx中502和504错误详解
查看>>
六、CPU优化(5)最大并行度
查看>>
MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-1-部署-虚拟机
查看>>
SCCM2012之部署安装
查看>>
通过Scala获取Github上的Scala-tool-Support的Vim配置
查看>>
HTML5 自定义属性 data-* 和 jQuery.data 详解
查看>>
Mandiant对APT1组织的***行动的情报分析报告
查看>>
规则与法则:中国式创业的界限与群像
查看>>
天籁数学——数列篇(2)
查看>>
一个可以更新时区的Calendar
查看>>
并行开发 —— 第二篇 Task的使用
查看>>
"百年一遇"奇怪问题的进展:找到原因,ajax请求中断引起
查看>>
读书清单+Github打造属于自己的简历
查看>>
Flex结合java实现一个登录功能
查看>>
关于几道面试的题目
查看>>