如何解决读取到文件末尾时碰到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文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...
随机推荐
- C# winform编程中多线程操作控件方法
private void Form1_Load(object sender, EventArgs e) { Thread newthread = new Thread(new ThreadStart( ...
- A planning attack on a commuter train carriage in Taipei
Last night an explosion on a commuter train carriage in Taipei Songshan railway station wounded at l ...
- poj1942 Paths on a Grid
处理阶乘有三种办法:(1)传统意义上的直接递归,n的规模最多到20+,太小了,在本题不适用,而且非常慢(2)稍快一点的算法,就是利用log()化乘为加,n的规模虽然扩展到1000+,但是由于要用三重循 ...
- 使用java配置定时任务的几种配置方式及示例
Spring定时器,主要有两种实现方式,包括Java Timer定时和Quartz定时器! 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 package ...
- 007Linux在线升级yum
1.Linux下如何安装软件:利用rpm命令进行安装: 2.rpm优点:安装过程很简单,不需要做额外的配置逻辑,拿到安装包,通过rpm命令就可以安装: 3.rpm缺点: (1)需要自己四处去找和系统版 ...
- javaSE第十三天
第十三天 76 1. StringBuffer(掌握) 76 (1)说明: 77 (2)StringBuffer的构造方法 77 (3)StringBuffer的常见功能 ...
- javaSE第四天
第四天 18 1. switch语句(掌握) 18 (1)格式: 18 (2)面试题 19 (3)执行流程: 19 (4)注意事项: 19 (5)案例: 19 ...
- UITextView如何关闭键盘
UITextField可以响应键盘上的完成按钮,关闭键盘,而UITextView不一样,它的return按钮或者Done按钮执行的是换行功能,不能达到关闭键盘的目的.解决方法有两个:一个是通过捕捉to ...
- Spring Controller 获取请求参数的几种方法
1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...
- SQL SERVER基础语句
1.增加字段名 ALTER TABLE [表名] ADD [列名] VARCHAR(20) NULL VARCHAR(20)是新加字段的类型和长度NUll:表示允许NULL值 3.修改字段类型 A ...