这段代码如何验证整数输入?

时间:2012-11-28 00:01:50

标签: c++ validation

我得到了循环,并且输入int类型的初始提示,但是......使用!(cin>> [variable])检查while循环是什么?我在cplusplus.com上查看了cin以获得解释,但我没有看到它有任何值......看起来它只是检查输入数字的数值,如何检查有效的整数输入?

int number;
.
.
.
    cout<<"Please enter a number: ";
    while (!(cin >> number))
    {
        cin.clear();
        cin >> badinput;
        cout <<"Input " << badinput << " is invalid, please enter a number: ";
    }

2 个答案:

答案 0 :(得分:1)

输入流上的

operator >>返回对流的引用,而不是从流中读取的内容。读取的值放在参数引用的内容中,该值必须是左值。

iostream上的!运算符测试流上的失败标志 - 如果流上出现任何类型的失败,则返回true。对于输入流,如果您尝试读取整数(因为此代码正在执行)并且输入看起来不像整数,则将设置失败标志。

因此,此代码(尝试)将整数读入number,然后测试失败标志。如果已设置,则清除失败标志,读取badinput(可能是字符串),打印消息并循环,尝试读取另一个整数。

因此只要格式化失败,它就会循环直到获得整数。如果还有一些其他更持久的失败(例如,如果cin获得EOF或被关闭),它将永远循环。

答案 1 :(得分:-1)

我认为它会检查是否输入了正数。正数将为真,导致!number为false并跳过循环。如果它不是输入的正数,则它将为false,导致!number为真并进入循环。