谁能帮我看看clear(flag)
先看代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
istream &in = cin;
string str;
cout << in.bad() << ' ' << in.fail() << ' ' << in.eof() << endl;
while(in >> str);
cout << in.bad() << ' ' << in.fail() << ' ' << in.eof() << endl;
in.clear(istream::eofbit);
in.clear(istream::failbit);
//in.clear(istream::eofbit);
cout << in.bad() << ' ' << in.fail() << ' ' << in.eof() << endl;
while(in >> str);
cout << in.bad() << ' ' << in.fail() << ' ' << in.eof() << endl;
system("pause");
return 0;
}
在第一次while时假如我随便输入两个字符串,slie slie再按ctrl+Z,输入结束。
这时流的状态为:0 1 1
可是我调用in.clear(istream::eofbit);与in.clear(istream::failbit);函数把eofbit与failbit置为有效也就是 0 0 0
怎么第三次COUT输出是:0 1 0啊,怎么没把failbit置为有效啊!!请问这是怎么回事????
我知道调用in.clear();可以都置有效。但上面的也应该是对的呀!!!
[解决办法]
永远用clear();而不要用clear(flag);
[解决办法]
clear(flag)使用flag这个状态覆盖掉流的状态,而不是去掉流的某个状态,可以用如in.clear(istream::failbit^in.rdstate());