文章出处:http://blog.chinaunix.net/uid-27034868-id-3758629.html

对于文本文件,当我们使用eof()判断文件是否结束时会多读一次(c语言也有类似的情况),或许你有遇到过这种情况。

先看下面的例子吧:

假设输入文件in.txt的内容为:

abc

则输出结果是:abcc

明明使用了eof()判断了,为什么还是这样的呢?原因是这样的,因为eof()发现读到文件结束标志EOF(即-1)时并不会立刻返回true,

而是比较后知后觉。此时需要再读一下,这时eofbit才被设置(并且设置其他的bit,如goodbit),等下次调用eof()时才返回true。 C++ Standard Library中Constants  for  the  Stateof  Streams有一个表如下:

既然知道问题所在,问题就好解决了。

方法一:

while( !infile.eof() )

{

infile >> data;

if( infile.good()

{

cout << data ;

}

}

或者:

while( !infile.eof() )

{

infile >> data;

if (infile.fail())

{

break;

}

cout << data ;

}

方法二:

while(infile >> data)

{

cout << data ;

}

方法三:使用peek函数

while(infile.peek()!=EOF)

{

infile >> data; //用>>读取时会忽略(跳过)空格等空字符,使用infile.get(data)不会

cout << data ;

}

peek()只是查看缓冲的下一个元素,并不读取(即文件内部指针不会向后移动),c++ Standard Library中有一句描述:

Returns the next character to be read from the  stream without extracting it.

可以看出peek有一个局限,只能在读取char类型时使用。

例如,in.txt内容为以空格隔开的字符串,因为我们在程序中写入文件时,每写入一个字符串之后跟一个空格,所以最后一个字符串之后有空格:

string str;

while(infile.peek()!=EOF)

{

infile >> str;

cout << str << endl;

}

同样会多读一次, 不信可以试试看,呵呵。至于如何解决,我想你应该能够举一反三了吧。

转:C++读取EOF文件相关推荐

  1. python将二维列表内容写入和读取.txt文件

    python读取txt文件至列表当中 首先看txt文件中内容. 上代码: readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表 每一行的内容为列表种的一个元素 我们通过循环将内容 ...

  2. php -- 读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  3. 在node.js中一次读取一行文件?

    本文翻译自:Read a file one line at a time in node.js? I am trying to read a large file one line at a time ...

  4. php 最大文件,php读取大文件最好的实现方法

    php读取大文件方法我们一般是一行行来讲取而不是一次性把文件全部写入内存中了,这样会导致php程序卡死,下面给大家整理一个例子.  代码如下 复制代码 读取大文件最后几行数据: /** * 取文件最后 ...

  5. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

  6. PHP几个快速读取大文件例子

    PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents ...

  7. c++ 读取txt文件保存到vect

    代码和数据在这里  #include <iostream> #include <vector> #include <fstream> #include <s ...

  8. Python读取大文件的坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩"坑". 笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. r ...

  9. c读取txt文件内容并建立一个链表_C++链表实现学生信息管理系统

    可以增删查改,使用链表存储,支持排序以及文件存储及数据读取,基本可以应付期末大作业(狗头) 界面为 源代码为一个main.cpp和三个头文件,具体为 main.cpp #include <ios ...

最新文章

  1. Markdown学习之路
  2. linux memcache 源码包,Linux 安装Memcache扩展支持(示例代码)
  3. 写段QTP脚本与大家一起分享
  4. 分布式文件系统—HDFS—入门简介
  5. Spark 简介与安装部署
  6. php 正则表达式 x,php – 匹配x正则表达式或y正则表达式
  7. nginx源码分析之网络初始化
  8. python时间模块设置_Python之时间和日期模块
  9. ubuntu 11.10下载和编译Android源码
  10. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
  11. flex中list或Combox中的子项上移下移操作
  12. 【初级03】java JVM核心技术(3): jvm调优
  13. ubuntu 14.04 将用户目录下中文目录修改为英文目录
  14. ARCGIS操作教程学习
  15. ubuntu下切换到root用户
  16. EDA技术及应用实验2 or2a程序
  17. PicGo搭建图床避坑
  18. 我励志成为芸芸阿里云大使中的佼佼者 云大使社区
  19. html涟漪动画效果,CSS+JS实现水滴涟漪动画按钮效果的示例代码
  20. MDPI论文投稿全流程实例讲解

热门文章

  1. anki卡片浏览器_Anki怎么用|小白anki安装使用指南+记忆库资源推荐
  2. 【Blender】问题记录001--用grease pencil画线条时一节一节不连贯的原因
  3. 2000-XP-2003操作系统常见问题
  4. As Error:Failed to find configured root that contains /storage/emulated/0/xxx/xxx/xxx.png
  5. sql查询数据表某列的重复值并计数
  6. 浅谈产业界与学术界的合作研究(转)
  7. echo “c“ > /proc/sysrq-trigger 让linux系统崩溃之后的恢复办法
  8. [多目标优化算法]1.NSGA-II——非支配排序遗传算法
  9. Docker Swarm学习教程【转载】
  10. 百度提前批-面试凉凉之-梯度下降