2011-04-07 68 views
2

我試圖用C++編寫一個簡單的代碼來讀取文本文件中的整數,代碼應該在遇到負整數時停止讀取。 txt文件在每行上包含1個正整數,最後一行是負整數。如何在遇到負數時停止從文本文件讀取整數?

我的代碼現在使用eof,它也讀取負整數也是我不想要的。

while(!inFile.eof()) 
{ 
    inFile >> data; 
} 

文本文件

10 
22 
33 
34 
-1 

感謝提前:)

回答

8

嗯..從如果文件檢查讀取

int data = 0; 
while(inFile >> data && data >= 0) 
{ 
// do stuff with data. 
} 
+3

您應該_explain_您的答案,而不僅僅是轉儲代碼。 – 2013-10-14 12:07:15

+0

@LightnessRacesinOrbit,我認爲代碼非常簡潔地解釋了需要完成的工作......一位好奇的讀者應該能夠把握那些並且調查他們不確定的部分 - 一項寶貴的技能IMO ... – Nim 2013-10-14 14:00:07

+0

是的,我同意,但是當OP已經表明他在這個領域缺少了一些理解時,爲了實現這個目標而改變了一些代碼而沒有做出解釋,那通常是更危險的。否則,他可能會認爲,例如,出於風格原因,你擺脫了「while(!eof)」。 – 2013-10-15 11:18:27

1

您將至少需要讀取負數,以確定你已經達到了輸入的結束。

while(inFile >> data) 
{ 
    if (data < 0) break; 
} 
+12

只是錯誤的。 (只要你看到'istream :: eof()'爲循環條件,代碼幾乎肯定是錯的。) – 2011-04-07 11:04:08

+0

嗯,明白你的觀點。我更正了代碼。 – 2011-04-07 11:17:03

+0

但不是評論:-)。使用'istream :: eof()'是原始代碼中的錯誤,應該指出這一點。 (否則,尼姆的答案是完美的。) – 2011-04-07 13:43:04

-5

也許這樣的事情,它試圖測試引入整數,將工作:

while(!inFile.eof()) 
{ 
    inFile >> data; 
    if (data < 0) { 
     break; 
    } 
} 
+1

爲什麼downvote,請嗎?謝謝! – 2011-04-16 13:07:14

+3

因爲答案是錯誤的:只有在嘗試閱讀EOF後才能打開EOF。所以EOF不會在'inFile >>數據之前被設置;'但是會在這次調用之後被設置。當它被設置時,即使價值現在基本上是隨機的,你仍然使用數據。 Rember最後一次成功閱讀將讀取最新**,但不會過去** EOF。最後一次讀取會嘗試讀取過去和失敗(此時您不能使用讀取的值)。 – 2012-01-04 01:08:41

1
while(!infile.eof()) 
{ 
infile>>data; 
if(data>0) 
cout<<data; 
} 

大於零,然後打印它