我有这段代码:
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
。
我错过了什么?
答案 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)
无法与双倍进行比较而引起的。