如何解决读取到文件末尾时碰到EOF导致的重复输出或者无用输出
当读取到文件末尾时,会碰到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导致的重复输出或者无用输出的更多相关文章
- C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题
前言 最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一:安装foxpro的驱动进行 ...
- python 如何读取大文件
一般的读取文件的方法: with open(file_path, "r") as f: print f.read() 或者 with open(file_path,"r& ...
- 用Python读取大文件
通常我们在读取文件的时候,会用到read(), readline(), readlines(). 通常可能会有这样的用法: def test1(): with open("/tmp/test ...
- Python读取 csv文件中文乱码处理
需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...
- NIO入门之轻松读取大文件
NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...
- R_Studio读取xls文件
百度经验 传送门 需要包xlsx 依赖包rjava 需要安装java编译环境 在R Console中执行命令install.packages("rjava"),install.pa ...
- python中判断readline读到文件末尾
fp = open('somefile.txt') while True: line = fp.readline() if not line: #等价于if line == "": ...
- 文件流结尾的EOF详解
我学习C语言的时候,遇到的一个问题就是EOF. 它是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file) ...
- Java中读取txt文件中中文字符时,出现乱码的解决办法
这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...
随机推荐
- Boost C++: 数据结构---tuple
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple_io.hpp> #include <boost/ ...
- Something wrong with FTK OCR
A case about business secret the suspect took lots of photos and screenshots from BOM, RD papers... ...
- No deleted LINE chat messages recovered on iOS 9.1 after UFED extraction
The evidence is iPhone 5s with iOS 9.1 and not jail breaked. I use UFED to do advanced logical extra ...
- PayPal 开发详解(四):买家付款
1.点击[立即付款] 2.使用[个人账户]登录paypal Personal测试帐号 3.核对商品信息 4.确认信息无误,点击[立即付款],提示付款成功,跳转到商家设置的URL 5.URL中包含pa ...
- Idea基本设置
1.idea 如何更改比编辑器文本字体和大小 换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea ...
- .NET Web开发总结(四)
6.1 IIS配置站点 · IIS ,英文全称Internet Information Services, 是Windows服务器操作系统自带的*服务器软件* · 通过IIS ...
- 简单linux网络驱动程序
本文代码参考<LINUX设备驱动程序>第十七章 网络驱动程序 网络地址和虚拟主机地址为: snullnet0 192.168.0.0 snullnet1 192.168.1.0 local ...
- 开始记录blog
将自己的总结.新的记录下来,形成习惯,为以后的温故知新
- POJ C程序设计进阶 编程题#3: 发票统计
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个小型的报账系统,它有如 ...
- 05-Tom猫(UIImageView的简单运用)
ViewController.h文件中: @interface ViewController : UIViewController @property (weak, nonatomic) IBOutl ...