-1

結果は 'c' を 3 回出力しますが、最初の条件を常に満たしている理由を知っている人はいますか?

#include <iostream>

using namespace std;


char x(char y)
{
    if (y == 'a' || 'b')
    {
        return 'c';
    }
    else if (y == 'c' || 'd')
    {
        return 'e';
    }
    else
    {
        return 'g';
    }
}


int main()
{
    cout << x('a') << endl;
    cout << x('c') << endl;
    cout << x('p') << endl;
    return 0;
}
4

3 に答える 3

8

あなたは形の何かが必要です

if (y == 'a' || y == 'b')

これは、この表現では

(y == 'a' || 'b')

とのORを評価してy == 'a'おり'b'、ゼロ以外であるためにに評価されるため、式全体がに評価されます。'b'truetrue

(y == 'a' || true)
于 2013-03-11T20:15:36.937 に答える
6

この行:

if (y == 'a' || 'b')

と同等です:

if ((y == 'a') || ('b'))

これは、演算子の優先順位が演算子よりも高い==ためです。||

'b'はゼロ以外であるため、常にtrueと評価され、常にtrueと(y == 'a' || 'b')評価されます。

あなたはこれを書く必要があります:

if (y == 'a' || y == 'b')

もちろん、優先順位が逆だったとしても、

if (y == ('a' || 'b'))

あなたが意図したものでもなかっただろう!

于 2013-03-11T20:17:02.187 に答える
0

ここで演算子の優先順位 (priority) を確認してください: http://en.cppreference.com/w/cpp/language/operator_precedence

あなたの場合、条件式は次のとおりです。

(y == 'a' || 'b')

したがって、「y == 'a'」部分が最初に評価され、「y」の値に応じて true/false になる場合があります。「y=='a'」の値を「t」としましょう。そして、式は " t || 'b'" として評価されます。この場合、'b' は実際には文字 'b' (98) の ASCII コード値であり、0 よりも確実に大きいため、ブール式の結果は次のようになります。常に真実。

演算子の優先順位によるあいまいさを解消するために、括弧を使用して評価での優先順位を明示的に表現するのは良い習慣だと思います。あなたの場合、以前の投稿で示唆されているように、次のようにする必要があります。

if ((y=='a') || (y=='b'))
于 2013-03-11T20:32:25.563 に答える