【问题标题】:Is it possible to manually set istream fail bit in C++11是否可以在 C++11 中手动设置 istream 失败位
【发布时间】:2016-12-28 03:33:37
【问题描述】:

我已经做了这门课:

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 一样。但是,如果我目前这样做,那么只要出现错误,就会出现无限循环。 -_- 是否可以设置失败位,还是我必须以不同的方式解决这个问题?

【问题讨论】:

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

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用setstate。注意你应该把它放在putback的调用之后,否则字符不会被putbacked成功,因为流已经处于错误状态。即

    if (c==d) {
    
        in.putback(d);
        in.putback(c);
    
        /*set the fail bit some how*/
        in.setstate(std::ios_base::failbit);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2022-07-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多