检查输入是否为整数

时间:2014-12-12 11:05:21

标签: 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会跳过它,允许用户再次输入另一个字符。所以程序应该工作正常(但实际上它没有!) 为什么它不像我上面解释的那样工作?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

嗯,C中的字符(我想猜的是C ++)实际上是小整数,所以如果你想检查输入是否是数字(或包含数字),你应该检查它是否来自types.h(IIRC)的函数。我不确定是否有更好的,更多的C ++&#39; ish方法。

你在这里基本上做的是检查std:cin是否为真。您确定空流或仅包含换行符的流是否为假?