结果打印出"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)
你需要一些形式的东西
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)
这一行:
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)
不会是你想要的!