2012-08-26 46 views
4

檢查這個程序C++:使用ifstream和getline();

ifstream filein("Hey.txt"); 
filein.getline(line,99); 
cout<<line<<endl; 
filein.getline(line,99); 
cout<<line<<endl; 
filein.close(); 

文件Hey.txt有很多人物在裏面。嗯,超過1000

但我的問題是 爲什麼在第二次我嘗試打印行。它不打印?

回答

8

根據該C++參考時計數-1的字符已被萃取(here)函數getline設置ios::fail。您必須在getline()調用之間撥打filein.clear();

+1

你的答案的一些解釋會很好。什麼是ios ::失敗,發生了什麼:D –

+0

谷歌ios ::失敗,你會得到你的答案。 – 2012-08-26 20:29:14

+1

我喜歡像你這樣的人,推動我這樣。再次感謝 –

19

閱讀從流線的慣用方式是這樣的:

{ 
    std::ifstream filein("Hey.txt"); 

    for (std::string line; std::getline(filein, line);) 
    { 
     std::cout << line << std::endl; 
    } 
} 

注:

  • 沒有close()。 C++在使用慣用語時爲您管理資源管理。

  • 使用免費std::getline,而不是流成員函數。

+0

偉大的信息,但爲什麼我的代碼做它在做什麼 –

+1

這實際上並沒有幫助我的問題 –

+0

@MohamedAhmedNabil:你永遠不會檢查你的輸入操作的返回值,所以完全不可能告訴你的程序是什麼這樣做。 –

0

由於Kerrek SB所說的正確的有兩種方式: 1)第二行是一個空行 2)沒有第二線和所有1000多個字符是在同一行,所以第二getline有沒有得到。

+0

實際上,即使它是一行,getline應該繼續它停止的地方 –