4

我有这个代码:

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

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

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

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

我错过了什么?

4

5 回答 5

10

像这样使用它。

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

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

cin >> i
|-------| //this is an object of istream class
于 2012-10-12T18:56:05.923 回答
4

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

while((cin >> i) && ( i < 0.0))
{
    cout << "ENTER A POSITIVE NUMBER: ";
}
于 2012-10-12T18:57:08.037 回答
4

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

您可以编写相同的语句,不带break, 为:

double i;
while ((cin >> i) && (i < 0.0)) {
    cout << "ENTER A POSITIVE NUMBER: "; 
}
于 2012-10-12T18:58:39.177 回答
2

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

cin >> i >> j;

你可以试试这个:

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

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

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

于 2012-10-12T18:55:47.203 回答
0

做:

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

该错误是由于表达式(cin >> i)对于与双精度比较无效的事实引起的。

于 2012-10-12T18:55:55.250 回答