c++ - 如何处理输入流中留下的无关字符? (cin 跳过)

标签 c++ input

对于这里的菜鸟问题,我深表歉意,但我只是在学习 C++,我正在寻找处理这个问题的标准方法。我正在使用 VS2005。

给定一个程序:

#include <iostream>

using namespace std;

int main( )
{
    while ( true )
    {       
        cout << "enter anything but an integer and watch me loop." << endl;     
        int i;
        cin >> i;               
    }
    return 0;
}

如果您输入的不是整数,程序将永远不允许您再次输入任何内容。现在,我意识到这是因为格式失败后流中还剩下输入,所以每次调用 cin << i 只是读取到下一个结束行(我认为)。你们如何清除流或处理这个问题?这一定很常见。

最佳答案

用 if 包围 cin 调用。

如果读取到错误的数据,cin 将返回 false。

所以:

if (!cin >> i) {
  cin.clear();
  cin.ignore(INT_MAX, '\n');
  cout << "Haha, your looping efforts have been thwarted dear sir\n";
}

cin.flush() 应该可以解决问题(根据 cppreference.com),但显然不是在 VS 上。

cin.clear() 将所有标志重置为良好状态。 cin.ignore 一个大数字,直到 '\n' 应该工作。

关于c++ - 如何处理输入流中留下的无关字符? (cin 跳过),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1317424/

相关文章:

.net - C++ 'GET' 请求或如何下载文件以在 C++ 中使用?

scala - 从 Scala 控制台读取密码

c++ - 从控制台获取字符串但不知道长度

c++ - 用源代码 boost spirit 解析

c++ - 这是使用私有(private)继承权吗?

python - 在python中输入if条件

javascript - fileReader Javascript 的结果并不总是相同

javascript - 使用js和后退按钮切换类

c++ - 在编译时引用 const 值——什么时候 const 的定义才真正可用?

c++ - (1U << X) 有什么作用?