看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
renderer:嗯嗯 謝謝 k 大 61.228.217.9 07/11
renderer:khoguan 大 8376 7/10 SPower 大的問題未解 61.228.217.9 07/11