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

标签 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 做的那样。但是,如果我现在这样做,只要出现错误,就会出现无限循环。 -_- 是否可以设置失败位,或者我是否必须以不同的方式处理这个问题?

最佳答案

您可以使用 basic_ios::setstate 设置输入流的 failbit功能:

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

关于c++ - 是否可以在 C++11 中手动设置 istream 失败位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41355007/

相关文章:

c++ - 使用opencv c++对相同的面孔进行分组

c++ - Cin 显示默认值

c++ - 运行最简单的 C++ 程序时出现 AVG Access Denied 警告

c++ - 函数被多次调用

c++ - unique_ptrs、shared_ptrs 或 ID 的存储列表?

c++ - 用 vector 构建动态递归结构

java - 使用什么语言来执行 mcmc 算法?

c++ - 使用 std::vector 分配的类比指针分配慢很多

c++ - 为什么 cout.tellp 总是返回 -1?

c++ - 将数据存储在 char 数组中导致变量周围损坏