日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]有不少人用eof函數(shù)碰到讀多了一次的問(wèn)題,但凡c/c++里的eof函數(shù),比如feof,fstream對(duì)象的eof函數(shù)等等,都是相同的原理。還原一下現(xiàn)場(chǎng):#include#includeusing?na

有不少人用eof函數(shù)碰到讀多了一次的問(wèn)題,但凡c/c++里的eof函數(shù),比如feof,fstream對(duì)象的eof函數(shù)等等,都是相同的原理。

還原一下現(xiàn)場(chǎng):

#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;
}


運(yùn)行會(huì)發(fā)現(xiàn)寫(xiě)了6個(gè)3進(jìn)去,打開(kāi)文件看也是6個(gè)3,但是讀卻讀了7個(gè)出來(lái)。

這主要是eof標(biāo)志延遲了。eof主要是根據(jù)eofbit來(lái)確定返回值的:

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

而eofbit是在讀取中設(shè)置的,讀取到最后一次時(shí),eofbit仍然為false;到下一次讀取失敗后,它才更新eofbit為true,也就是說(shuō)要犯一次錯(cuò)才知道。在這嘗試讀取中,讀取失敗,所以k還是上一次的值。

因此,一般都是直接把讀取語(yǔ)句放在while循環(huán)里面。

#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函數(shù),那么就先讀取一次。

#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語(yǔ)言中的函數(shù)也是類似這樣子。




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉