-3

while ループが必要な場合: while a variable is NOT equal 複数の異なる値, これは有効ですか?:

while (uInput != ('a' || 'b' || 'c')){
    //do something to make it equal one of those
}

それとも、uInput と a、uInput と b などを個別に比較する必要がありますか?

4

4 に答える 4

5

それはあなたがしたいことをしません。各値を個別に比較する必要があります。

uInput != 'a' && uInput != 'b' && uInput != 'c'

そのまま、('a' || 'b' || 'c')に評価されtrue、式は次と同等になります。

uInput != true
于 2013-04-14T17:47:27.707 に答える
3

いいえ。書きたいことは次のとおりです。

while ((uInput != 'a') && (uInput != 'b') && (uInput != 'c'))
{
    //do something to make it equal one of those
}

式は、文字、、およびtoo('a' || 'b' || 'c')を変換することによって評価されます。実際には、最初のオペランド( ) のみがここで評価されます。これは、その評価によって値が得られ、式全体も同様に評価されることが保証されるためです。ショートサーキットが適用されます。'a''b''c'bool'a'true('a' || 'b' || 'c')true

したがって、最初のループは次のようになります。

while (uInput != true)
{
    //do something to make it equal one of those
}

これはあなたが望むものではありません。

于 2013-04-14T17:47:38.293 に答える
1

正解は

while (uInput != 'a' && uInput != 'b' && uInput != 'c')

コンディションだから

uInput != 'a' || uInput != 'b' || uInput != 'c'

uInput が値の 1 つと等しい場合でも、常に true と評価され、ループが無限ループになります。

C++ 構文について読む必要があります。

于 2013-04-14T17:49:45.170 に答える