有条件不工作,总是返回第一个案例

Seb*_*Seb -1 c++ operators

结果打印出"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;
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 8

你需要一些形式的东西

if (y == 'a' || y == 'b')
Run Code Online (Sandbox Code Playgroud)

这是因为在这个表达中

(y == 'a' || 'b')
Run Code Online (Sandbox Code Playgroud)

您正在评估的OR的y == 'a''b',并且由于'b'计算结果为true由于是非零,整个表达式求true.

(y == 'a' || true)
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 6

这一行:

if (y == 'a' || 'b')
Run Code Online (Sandbox Code Playgroud)

相当于:

if ((y == 'a') || ('b'))
Run Code Online (Sandbox Code Playgroud)

那是因为==运营商的优先级高于||运营商.

由于'b'非零,因此它始终计算为true,因此(y == 'a' || 'b')始终计算为true.

你需要写这个:

if (y == 'a' || y == 'b')
Run Code Online (Sandbox Code Playgroud)

当然,即使优先权是相反的,

if (y == ('a' || 'b'))
Run Code Online (Sandbox Code Playgroud)

不会是你想要的!