c++ - 检查输入是否为整数

标签 c++ cin

我知道这样的问题还有很多,而且都有正确答案。然而,我在这里关心的是为什么我对下面代码的解释是错误的。

#include <iostream>
#include <string>

int main(){
    std::cout << "Write an integer:\n>";
    int n;
    std::cin >> n;
    while (!std::cin) {
        std::cout << "ERROR, you are allowed to enter an integer only.Try again!\n>";
        std::cin.clear();
        //std::cin.ignore(10000,'\n');
        std::cin >> n;
    }
    std::cout << "\nYou entered the integer: " << n;
    return 0;
} 

现在发生的情况是,如果我输入像“h”这样的字符,它将永远继续显示错误句子。
假设我没有运行该程序。我将上面的代码解释如下:
当我输入无效的输入(例如“h”)时,cin 将失败并且 while 条件将变为 true。另外,输入缓冲区中会有一个'\n'字符。
现在程序将显示错误消息并清除 cin 错误标志。现在cin恢复到原来的状态,可以再次获取输入了。
现在输入缓冲区中有一个换行符,cin 将跳过它,允许用户再次输入另一个字符。所以程序应该可以正常工作(但是,实际上却不然!)
为什么它不能像我上面解释的那样工作?

最佳答案

如果取消注释 std::cin.ignore,代码应该可以工作。如果没有ignore'h' 就不会从序列中删除,因此您会尝试一次又一次地读取它。

关于c++ - 检查输入是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442279/

相关文章:

c++ - 在继续之前,Cin 不会让用户在控制台中输入任何内容

c++ - 找出迷宫解算器的最佳解决方案,带动画输出

c++ - 将 g++ 代码翻译成 clion 环境

c++ - 为什么链表重新排序失败?

c++ - 我是否应该确保在退出程序之前销毁 SDL 2.0 对象(渲染器、窗口、纹理等)?

c++ - 一个字符串的 Cout 给出了一个错误并且很难有一些洞察力帮助吗?

c++ - cin 正在吃输出流

c++ - cin.clear() 和 cin.ignore() 之间是否需要顺序?

c++ - 为什么 cin.getline() 不起作用(C++)?

c++ - 在Qt C++中的void插槽中使用return时的C2120