是否可以在C ++ 11中手动设置istream失败位

时间:2016-12-28 03:33:37

标签: c++ c++11 iostream friend

我上过这堂课:

class object {
  // data...
 public:
  friend std::istream& operator>>(std::istream& in, object& o) {
    char c, d;
    in >> c >> d;
    if (c == d) {
      /*set the fail bit some how*/
      in.putback(d);
      in.putback(c);
    } else
      o.set_data(c, d);
    return in;
  }
};

我正在查看文档(不太好),但找不到设置失败位的正确方法。我关心的原因是我希望能够像while(std::cin>>obj)/*do stuff*/;一样使用int。但是,如果我目前这样做,那么每当出现错误时都会有无限循环。 -_-设置失败位是否可行,或者我将不得不以不同的方式处理此问题?

2 个答案:

答案 0 :(得分:11)

您可以使用basic_ios::setstate函数设置输入流的failbit:

in.setstate(std::ios_base::failbit);

答案 1 :(得分:6)

您可以使用setstate。请注意,您应该在调用putback之后添加它,否则字符不会成功putback,因为流已处于错误状态。即。

if (c==d) {

    in.putback(d);
    in.putback(c);

    /*set the fail bit some how*/
    in.setstate(std::ios_base::failbit);
}