作者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