0

我得到了循环,以及输入 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: ";
    }
4

2 回答 2

1

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

iostream 上的!运算符测试流上的失败标志——如果流上出现任何类型的失败,它返回 true。对于输入流,如果您尝试读取整数(如此代码所做的那样)并且输入看起来不像整数,则会设置失败标志。

所以这段代码(试图)读入一个整数number,然后测试失败标志。如果它被设置,它会清除失败标志,读取badinput(可能是一个字符串),打印消息并循环,尝试读取另一个整数。

所以只要唯一的失败是格式化,它就会循环直到它得到一个整数。如果还有其他一些更持久的故障(例如,如果 cin 获得 EOF 或已关闭),它将永远循环。

于 2012-11-28T01:04:11.767 回答
-1

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

于 2012-11-28T00:09:43.227 回答