2013-04-30 97 views
0

嗨,我目前寫了一個程序,但我在閱讀文件時遇到問題。它似乎讀了最後一行兩次,結果,兩次產生相同的結果。輸入文件讀取錯誤

我已經把getline()函數讀取第一行,以便存儲變量G的字符串。其餘的,我已經將它存儲在類對象的向量中。

基本的文件被打開,它會執行這個循環

file.open("bodies1.txt"); 
getline(file, G1); 
.... 


while(!file.eof) 
{ 
    file >> body; 
    bodies.push_back(body); 
} 

這是文本文件的樣子(這只是一個樣本。沒有實際的東西)

0.02932 
Sun 32 42 53 2 2 
Moon 49 32 4 2 1 
Jupiter 32 53 2 3 2 

我真的想知道爲什麼它讀了兩次最後一行。有什麼建議麼?

+1

@JesseGood我同意EOF是問題,但我不確定這個問題是否是該問題的重複。這個答案將解決他們的問題。 – AlexLordThorsen 2013-04-30 20:23:55

+0

@Rawrgulmuffins:與C++反模式相關的問題'while(!file.eof)'很常見。查看有多少重複鏈接到該問題。 – 2013-04-30 20:34:26

回答

1
while(!file.eof()) 
{ 
    file >> body; 
    bodies.push_back(body); 
} 

body閱讀的最後一個對象後,eof下一個字符。然後

file >> body; 

試圖讀取並失敗。所以無論是在body之前還是有,並且會被推入到向量中。


相反,你應該象

while(file >> body) 
{ 
    bodies.push_back(body); 
} 

這樣你而一旦你遇到eof(),你會不會到向量做一個額外的動力停止。

+0

好吧,這是有道理的。它如何讀取eof很奇怪?從來不知道這是一個字符 – user2188311 2013-04-30 20:28:35

+0

@ user2188311不,它不是真的關於eof()。它是關於什麼時候讀取的。在第一種情況下,它是在循環體中讀取的。所以即使你擊中了循環的其餘部分仍然會被執行。想想吧:) – stardust 2013-04-30 20:30:03

+0

啊沒關係。謝謝 – user2188311 2013-04-30 20:35:31