4

私はこのコードを持っています:

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

私は何が欠けていますか?

4

5 に答える 5

10

このように使用してください。

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

オーバーロードされた関数 forcinは、 の参照によってオブジェクトを返しますistream class。したがって、それを double 値と比較することはできません。

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

cin の戻り値ではなく、i の値を確認したい

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

(cin >> i)は double を返しません。

, なしで同じステートメントを次のように書くことができます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)が double との比較に有効でないために発生します。

于 2012-10-12T18:55:55.250 に答える