在 while 循环 C++ 中输入负值

negative value input in while loop c++

本文关键字:输入 C++ while 循环      更新时间:2023-10-16

我有这个代码:

double i;
while(cin >> i)
{
    if ( i < 0.0)
        cout << "ENTER A POSITIVE NUMBER: ";
    else
        break;
}

想要这样的代码(我不想使用 break):

while((cin >> i) < 0.0)
{
    cout << "ENTER A POSITIVE NUMBER: ";
}

我在这一行上得到一个错误:while((cin >> i) < 0.0)invalid operands to binary expression.

我错过了什么?

像这样使用它。

while ((cin >> i) && (i < 0.0))

cin 的重载函数通过引用 istream class 返回对象。因此,您无法将其与双精度值进行比较。

cin >> i
|-------| //this is an object of istream class

表达式 (cin >> i) 不返回双精度。

您可以编写相同的语句,不带break,如下所示:

double i;
while ((cin >> i) && (i < 0.0)) {
    cout << "ENTER A POSITIVE NUMBER: "; 
}
你想

检查 i 的值,而不是 cin 的返回

while((cin >> i) && ( i < 0.0))
{
    cout << "ENTER A POSITIVE NUMBER: ";
}

cin >> i 的返回值是流,而不是读取值。这是为了允许操作数的链接

cin >> i >> j;

你可以试试这个:

while( (cin >> i, i) < 0. )
{
    cout << "ENTER A POSITIVE NUMBER: ";
}

逗号运算符应该返回 i 的值,但我还没有测试过它。

编辑:不要使用这种方法,因为大卫罗德里格斯已经注意到这丢弃了读取的结果。请改用while( (cin >>i) && (i<0.) )

做:

while( cin >> i && i < 0.0 )
{
    cout << "ENTER A POSITIVE NUMBER: ";
}

导致此错误的原因是表达式 (cin >> i) 对于与双精度值的比较无效。