当读取到文件末尾时,会碰到EOF,如何解决呢?
    方法一:我们可以通过(ch=fin.get())!=EOF来结束读取,这样就不会像eof()那样碰到EOF之后,还会再进行一次读取,导致输出一个无用的结束符或者重复前一字符

//a.txt中的内容为abc
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("a.txt");
char ch;
while((ch=fin.get())!=EOF) //到达文件结尾即停止读取
{
cout<<ch;
} cout<<"eofbit:"<<fin.eof()<<endl; //文件指针到达文件末尾,因此eofbit被设置为1
cout<<"failbit:"<<fin.fail()<<endl; //同理,failbit被设置为1 fin.close(); return ;
}

方法二:可以考虑将eof()与fail()结合起来使用来判断文件是否结束

//a.txt中的内容为abc
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("a.txt");
char ch;
while(!fin.eof())
{
ch=fin.get(); //尝试读取EOF,此时eofbit被置为1,failbit也被置为1
if(fin.fail()) break; //如果碰到EOF,则failbit被设置为1,因此fin.fail()返回true
cout<<ch;
}
fin.close(); return ;
}

方法三:可以通过get()函数读取EOF则失败来判断文件是否结束

//a.txt中的内容为abc
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("a.txt");
char ch;
while(!fin.eof())
{
if(fin.get(ch))
cout<<ch;
}
fin.close(); return ;
}

方法四:判断文件指针相对于开头的位置,是否等于文件长度

//a.txt中的内容为abc
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
long filelen;
ifstream fin("a.txt");
fin.seekg(, ios::end);
filelen=fin.tellg(); //获取文件长度
fin.seekg(, ios::beg);
char ch;
while()
{
if(filelen==fin.tellg()) break; //判断文件指针相对于开头的位置是否等于文件长度
ch=fin.get();
cout<<ch;
}
fin.close(); return ;
}

如何解决读取到文件末尾时碰到EOF导致的重复输出或者无用输出的更多相关文章

  1. C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题

    前言 最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一:安装foxpro的驱动进行 ...

  2. python 如何读取大文件

    一般的读取文件的方法: with open(file_path, "r") as f: print f.read() 或者 with open(file_path,"r& ...

  3. 用Python读取大文件

    通常我们在读取文件的时候,会用到read(), readline(), readlines(). 通常可能会有这样的用法: def test1(): with open("/tmp/test ...

  4. Python读取 csv文件中文乱码处理

    需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...

  5. NIO入门之轻松读取大文件

    NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...

  6. R_Studio读取xls文件

    百度经验 传送门 需要包xlsx 依赖包rjava 需要安装java编译环境 在R Console中执行命令install.packages("rjava"),install.pa ...

  7. python中判断readline读到文件末尾

    fp = open('somefile.txt') while True: line = fp.readline() if not line: #等价于if line == "": ...

  8. 文件流结尾的EOF详解

    我学习C语言的时候,遇到的一个问题就是EOF. 它是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file) ...

  9. Java中读取txt文件中中文字符时,出现乱码的解决办法

    这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...

随机推荐

  1. MySQL安装图文教程

    下载 1.下载地址: http://www.mysql.com/downloads/ 2.下载图解 下载社区版本就可以,社区版里有我们的想要的几乎全部功能.只不过 商业版的mysql会提供一定高级的解 ...

  2. WP8 调用特定API权限不足

    1.在解决方案中依次打开  Properties -> WMAppManifest.xml 2.点击功能 3.在左侧功能列表中勾选想要的功能权限.完毕

  3. 实例分析ELF文件静态链接

    参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第4章 静态链接 开发平台: [thm@tanghuimin static_link]$ uname ...

  4. CentOS学习笔记--防火墙iptables

    Linux 的防火墙:iptables iptables是封包过滤软件,Linux内核2.6以上都是这款软件.本节节选自 鸟哥的 Linux 私房菜 -- 服务器架设篇  第九章.防火墙与 NAT 服 ...

  5. ASP.NET MVC5 第4章

    参考资料<ASP.NET MVC5 高级编程>第5版 第4章 模型 本章所探讨的模型是要显示.保存.创建.更新和删除的对象. 基架指使用 MVC 提供的工具为每个模型对象的标准索引构建.创 ...

  6. 三个有用的SQL辅助工具

    三个有用的SQL辅助工具 编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信 ...

  7. WPF—TreeView无限极绑定集合形成树结构

    1.如图所示:绑定树效果图 2.前台Xaml代码: <Window x:Class="WpfTest.MainWindow" xmlns="http://schem ...

  8. redis的lua使用(EVALSHA)

    redis 127.0.0.1:6379> SCRIPT LOAD "local list=redis.call('KEYS', KEYS[1] .. '*') return (tab ...

  9. 用js读、写、删除Cookie

    //已经验证过 // JavaScript Document //使用说明:  //设置缓存:setCookie("name",value); //获取缓存:var name=ge ...

  10. UCOS2_STM32F1移植详细过程(三)

    Ⅰ.概述 上一篇文章是讲述ST芯片相关的配置和OS裁剪相关的配置,接着上一篇文章来讲述关于UCOS的移植,该文主要针对uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和o ...