当前位置:首页 > > 充电吧
[导读]有不少人用eof函数碰到读多了一次的问题,但凡c/c++里的eof函数,比如feof,fstream对象的eof函数等等,都是相同的原理。还原一下现场:#include#includeusing na

有不少人用eof函数碰到读多了一次的问题,但凡c/c++里的eof函数,比如feof,fstream对象的eof函数等等,都是相同的原理。

还原一下现场:

#include#includeusing namespace std;
int main()
{
	fstream out;
	out.open("test.txt",ios::out);
	int k=3;
	for(int i=0;i<6;i++)
		out<<k<<" ";
	out.close();


	out.open("test.txt",ios::in);
	while(!out.eof())
	{
		out>>k;
		cout<<k<<endl;
	}
	out.close();
	return 0;
}


运行会发现写了6个3进去,打开文件看也是6个3,但是读却读了7个出来。

这主要是eof标志延迟了。eof主要是根据eofbit来确定返回值的:

bool eof()
{
	if(eofbit)
	return true;
	else return false;
}

而eofbit是在读取中设置的,读取到最后一次时,eofbit仍然为false;到下一次读取失败后,它才更新eofbit为true,也就是说要犯一次错才知道。在这尝试读取中,读取失败,所以k还是上一次的值。

因此,一般都是直接把读取语句放在while循环里面。

#include#includeusing namespace std;
int main()
{
	fstream out;
	out.open("test.txt",ios::out);
	int k=3;
	for(int i=0;i<6;i++)
		out<<k<<" ";
	out.close();


	out.open("test.txt",ios::in);
	while(out>>k)
	{
		
		cout<<k<<endl;
	}
	out.close();
	return 0;
}

如果一定要用eof函数,那么就先读取一次。

#include#includeusing namespace std;
int main()
{
	fstream out;
	out.open("test.txt",ios::out);
	int k=3;
	for(int i=0;i<6;i++)
		out<<k<<" ";
	out.close();


	out.open("test.txt",ios::in);
	
	//here
	out>>k;
	while(!out.eof())
	{
		out>>k;
		cout<<k<<endl;
	}
	out.close();
	return 0;
}

c语言中的函数也是类似这样子。




本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c...

关键字: c++ C语言 const

返回函数的引用去初始化一个新的引用这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp的别名,在c的生命周期内temp是一直有效的,这样做完全可以。

关键字: c++ 返回值 引用声明

C++是一种面向对象的高级程序设计语言,是C语言的超集。

关键字: c++ C语言

以前都只是在网上搜的能用的例子,对一些参数不是很清楚,这次汇总。而且网络通信还是很常用的通信手段。

关键字: api c Linux socket

什么是Littelfuse setP™温度指示器?它有什么作用?2019年6月12日讯 - - Littelfuse, Inc. (NASDAQ: LFUS)今日宣布推出经过扩展的PolySwitch® setP™ 系列...

关键字: c littelfuse type USB 连接器

第三方代码的使用是企业能够快速高效建立新系统、新产品、新平台的关键因素,能大幅度缩短开发周期,减少人力和资金的投入。目前大部分第三方代码包含大量的开源代码,并且主要是以二进制代码或是源代码的方式

关键字: c 代码

作为初学者,我想记录一下我的学习状况,一是可以回头寻找自己的进步,二是希望我可以通过这种学习方式来指导未来想学的伙伴们。

关键字: c C语言 Linux

根据今年早些时候发布的2019年关于嵌入式市场研究的报告,虽然物联网、嵌入式视觉、机器学习和其他新兴技术的重要性日益提高,但C和C ++仍是嵌入式开发中占主导地位的编程语言。

关键字: c python 嵌入式 技术前沿 ++

分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的

关键字: c++ class

单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静

关键字: c 单例 qt单例模式
关闭