首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-22 
谁能帮我看看clear(flag)先看代码:#include iostream#include stringusing namespace stdint main(){

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

热点排行