c++ - cin流错误

标签 c++

int main()
{
    int i;

    if (cin >> i)
    {
        //ok
    }
    else
    {
        //error
        cin.setstate(std::ios_base::goodbit);
    }
}

为什么我不能通过 setstate() 设置 goodbit 来清除 failbit 而不是 cin.clear()?

最佳答案

因为 setstate 将当前状态与您通过按位 OR 传递的任何状态组合在一起,因此失败位不会被清除(设置为零) .

所以假设:

Assume a very simple state mechanism:
00
^^
||
|\
| the fail bit
 \
   the ok bit

当你的状态为 01 时执行 setstate(okbit) 只会给你 11 (看,ma,失败位仍然是set)所以实际上你所做的就是搞乱内部流状态。您确实应该完全避免使用 setstate

Click供引用。

关于c++ - cin流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052385/

相关文章:

c++ - 为什么在打印 BST 的前序遍历时我的程序什么都不做

c++ - 在文本文件中间附加字符串

c++ - 当我在 C++ 中终止 pThread 时,是否会调用堆栈上对象的析构函数?

c# - 什么是 C++ 中拼接的 C# 替代方案

c++ - `template<typename>;` 是合法的 C++ 吗?

c++ - 如何用复数和多态重载运算符?

c++ - (CMake 构建) fatal error LNK1181 : cannot open input file 'glew.lib'

c++ - 使用 operator+ 而不会泄漏内存?

c++ - 基于 bool 模板参数的重载

c++ - 简单代码导致错误读取变量: Cannot access memory at address