我試圖用C++編寫一個簡單的代碼來讀取文本文件中的整數,代碼應該在遇到負整數時停止讀取。 txt文件在每行上包含1個正整數,最後一行是負整數。如何在遇到負數時停止從文本文件讀取整數?
我的代碼現在使用eof,它也讀取負整數也是我不想要的。
while(!inFile.eof())
{
inFile >> data;
}
文本文件
10
22
33
34
-1
感謝提前:)
我試圖用C++編寫一個簡單的代碼來讀取文本文件中的整數,代碼應該在遇到負整數時停止讀取。 txt文件在每行上包含1個正整數,最後一行是負整數。如何在遇到負數時停止從文本文件讀取整數?
我的代碼現在使用eof,它也讀取負整數也是我不想要的。
while(!inFile.eof())
{
inFile >> data;
}
文本文件
10
22
33
34
-1
感謝提前:)
嗯..從如果文件檢查讀取
int data = 0;
while(inFile >> data && data >= 0)
{
// do stuff with data.
}
您將至少需要讀取負數,以確定你已經達到了輸入的結束。
while(inFile >> data)
{
if (data < 0) break;
}
只是錯誤的。 (只要你看到'istream :: eof()'爲循環條件,代碼幾乎肯定是錯的。) – 2011-04-07 11:04:08
嗯,明白你的觀點。我更正了代碼。 – 2011-04-07 11:17:03
但不是評論:-)。使用'istream :: eof()'是原始代碼中的錯誤,應該指出這一點。 (否則,尼姆的答案是完美的。) – 2011-04-07 13:43:04
也許這樣的事情,它試圖測試引入整數,將工作:
while(!inFile.eof())
{
inFile >> data;
if (data < 0) {
break;
}
}
爲什麼downvote,請嗎?謝謝! – 2011-04-16 13:07:14
因爲答案是錯誤的:只有在嘗試閱讀EOF後才能打開EOF。所以EOF不會在'inFile >>數據之前被設置;'但是會在這次調用之後被設置。當它被設置時,即使價值現在基本上是隨機的,你仍然使用數據。 Rember最後一次成功閱讀將讀取最新**,但不會過去** EOF。最後一次讀取會嘗試讀取過去和失敗(此時您不能使用讀取的值)。 – 2012-01-04 01:08:41
while(!infile.eof())
{
infile>>data;
if(data>0)
cout<<data;
}
大於零,然後打印它
您應該_explain_您的答案,而不僅僅是轉儲代碼。 – 2013-10-14 12:07:15
@LightnessRacesinOrbit,我認爲代碼非常簡潔地解釋了需要完成的工作......一位好奇的讀者應該能夠把握那些並且調查他們不確定的部分 - 一項寶貴的技能IMO ... – Nim 2013-10-14 14:00:07
是的,我同意,但是當OP已經表明他在這個領域缺少了一些理解時,爲了實現這個目標而改變了一些代碼而沒有做出解釋,那通常是更危險的。否則,他可能會認爲,例如,出於風格原因,你擺脫了「while(!eof)」。 – 2013-10-15 11:18:27