while循环c ++中的负值输入

时间:2012-10-12 18:53:13

标签: c++ while-loop

我有这段代码:

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

我错过了什么?

5 个答案:

答案 0 :(得分:10)

像这样使用它。

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

cin的重载函数通过引用istream class返回一个对象。所以你无法将它与双倍值进行比较。

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

表达式(cin >> i)不返回double。

您可以在不使用break的情况下编写相同的语句:

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

答案 3 :(得分:2)

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

cin >> i >> j;

你可以试试这个:

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

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

编辑:不要使用这种方法,因为DavidRodríguez已经注意到这会丢弃读取的结果。请改用while( (cin >>i) && (i<0.) )

答案 4 :(得分:0)

执行:

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

错误是由于表达式(cin >> i)无法与双倍进行比较而引起的。