读书人

哪位高手能帮小弟我看看clear(flag)

发布时间: 2012-04-22 18:34:46 作者: rapoo

谁能帮我看看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());

读书人网 >C++

热点推荐