关于c和c++中的eof函数多读一个问题

本文探讨了C/C++编程中使用eof函数时常见的问题,即读取操作可能比预期多进行一次。原因是eof标志的延迟设置,只有在下一次读取失败后,eofbit才会更新为true。为了避免这种情况,建议将读取语句置于while循环内,或者在使用eof之前先尝试读取一次。
摘要由CSDN通过智能技术生成

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

还原一下现场:

#include<iostream>
#include<fstream>
using 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循

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值