Re: [請益] iostream 的 good() fail() bad()
看板C_and_CPP (C/C++)作者khoguan (Khoguan Phuann)時間19年前 (2005/07/11 21:33)推噓2(2推 0噓 0→)留言2則, 1人參與討論串2/2 (看更多)
※ 引述《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
推
61.228.217.9 07/11, , 1F
61.228.217.9 07/11, 1F
推
61.228.217.9 07/11, , 2F
61.228.217.9 07/11, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30