2010-03-12 18 views
1
while(getline(fileIn,line)) 
{ 

    fileOut <<line<<endl; 

} 


while(getline(fileIn,line)) 
{ 

    if(fileIn.eof()) 
    break; 
    fileOut <<line<<endl; 

} 

我已經嘗試了這兩個代碼段,第二個也讀取過去的文件結束,並沒有打破。誰能告訴我爲什麼?如何在使用getline時檢測文件結束?

我只是從文件中讀取數據並寫出來。

+2

發佈更多代碼。 – 2010-03-12 01:15:46

回答

0

是「fileIn」和「eof()」之間的逗號嗎? (第二個例子)

我喜歡做的一件事是在我的fstreams上啓用​​。 YMMV:

ifstream file; 
file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit); 
+1

eofbit很少做用戶想要的事情,並且爲它啓用例外通常是一個非常糟糕的主意。足夠使failbit具有完整的錯誤處理能力,但如果程序讀取到最後,我不會推薦這樣做,因爲這會導致異常在非例外(但是除外)情況下拋出。 – Tronic 2010-03-12 01:10:58

+0

這是一個我修正它的錯字。但問題依然存在。 – djones2010 2010-03-12 01:11:44

+0

@Tronic好點 – pestilence669 2010-03-12 02:45:52

0

第一個代碼是正確的,它肯定會在文件中沒有數據時結束循環。

3

getline函數返回您正在閱讀的流的引用。如果您嘗試通過 EOF讀取,則它的計算結果爲false。當您讀取文件的最後一行時,該流仍處於良好狀態。所以你永遠不會在第二塊代碼中達到if-test。