Re: [請益] iostream 的 good() fail() bad()

看板C_and_CPP (C/C++)作者 (Khoguan Phuann)時間19年前 (2005/07/11 21:33), 編輯推噓2(200)
留言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
嗯嗯 謝謝 k 大
61.228.217.9 07/11, 1F

61.228.217.9 07/11, , 2F
khoguan 大 8376 7/10 SPower 大的問題未解
61.228.217.9 07/11, 2F
文章代碼(AID): #12qdKqyw (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #12qdKqyw (C_and_CPP)