作者khoguan (Khoguan Phuann)
看板C_and_CPP
標題Re: [請益] iostream 的 good() fail() bad()
時間Mon Jul 11 21:46:36 2005
※ 引述《khoguan (Khoguan Phuann)》之銘言:
: 再舉一些例子,假如一個檔案有三行資料
: /* input.txt
: first
: second
: third
: */
: ifstream ifs("input.txt");
: string str;
: while (getline(ifs, str)) { // 測試的條件是 ifs 是否 !fail()
: cout << str << '\n';
: if (ifs.good()) cerr << "ifs good\n";
: }
: // 迴圈跑三次,每次都會顯示 ifs good
: // 離開迴圈,是因為第四次讀到 eof 所以 eof() 為真,而且因為要讀
: // 而沒得讀,fail() 也為真
剛才接到 renderer兄 的mail說,他的測試結果上述有出入:
> 前兩次是 good
> 最後一次是 eof
我想,這很可能是因為他用的測試檔的第三行資料並沒有以 '\n'
結尾,檔案就結束了。 getline(ifs, str); 函式會一直讀,直到
讀到'\n' 為止('\n' 也會從 istream 中被取出,但不會放進 str 中),
因為最後一行沒有 '\n' 就撞上 eof 了。若有 '\n' 擋到,在第三
圈剛跑完時,還不會發生 eof.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.168
1F:推 renderer:嗯嗯 謝謝 k 大 61.228.217.9 07/11
2F:推 renderer:khoguan 大 8376 7/10 SPower 大的問題未解 61.228.217.9 07/11