檢查這個程序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
但我的問題是 爲什麼在第二次我嘗試打印行。它不打印?
檢查這個程序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
但我的問題是 爲什麼在第二次我嘗試打印行。它不打印?
根據該C++參考時計數-1的字符已被萃取(here)函數getline設置ios::fail
。您必須在getline()
調用之間撥打filein.clear();
。
閱讀從流線的慣用方式是這樣的:
{
std::ifstream filein("Hey.txt");
for (std::string line; std::getline(filein, line);)
{
std::cout << line << std::endl;
}
}
注:
沒有close()
。 C++在使用慣用語時爲您管理資源管理。
使用免費std::getline
,而不是流成員函數。
偉大的信息,但爲什麼我的代碼做它在做什麼 –
這實際上並沒有幫助我的問題 –
@MohamedAhmedNabil:你永遠不會檢查你的輸入操作的返回值,所以完全不可能告訴你的程序是什麼這樣做。 –
由於Kerrek SB所說的正確的有兩種方式: 1)第二行是一個空行 2)沒有第二線和所有1000多個字符是在同一行,所以第二getline
有沒有得到。
實際上,即使它是一行,getline應該繼續它停止的地方 –
你的答案的一些解釋會很好。什麼是ios ::失敗,發生了什麼:D –
谷歌ios ::失敗,你會得到你的答案。 – 2012-08-26 20:29:14
我喜歡像你這樣的人,推動我這樣。再次感謝 –