通常,函数std::get()
在文件末尾设置eofbit
。由于c++ 11 std::unget()
首先清除此位,然后继续操作以取消读取最后一个字符。
令我感到困扰的是,到达eof后,unget()
似乎对我不起作用,它只能清除一点,但实际上并没有得到任何东西。以后对get()
的任何调用甚至都不会再次设置eofbit
。
这是故意的,我是否错过了文档中的某些内容?
gcc版本6.3.1,-std = c++ 11
#include <iostream>
using namespace std;
int main ()
{
while ( !cin . eof () )
cout << " " << cin . get () << " ";
cout << "end" << endl;
cout << cin . eof () << endl;
cout << (bool)cin . unget () << endl;
cout << cin . eof () << endl;
cout << cin . get () << endl;
cout << cin . eof () << endl;
return 0;
}
示例输入
foobar
示例输出
102 111 111 98 97 114 10 -1 end
1
0
0
-1
0
真正困扰我的不是不是将
-1
放回eof,而是为什么它在最后一个eofbit
之后不放回get()
呢? 最佳答案
关于eofbit
和failbit
:
关于get()
:
Unget清除eofbit
,但不能对failbit
做任何事情,因此也失败。后续对get
的调用失败,因为设置了failbit
,并且不检查下一个字符,因此无法设置eofbit
。