C++ 为什么if(a==b | c)&&;(d!=0){operation 1}默认运行,但(a==e | | f)&&;(d!=0){op2}是否被忽略?

C++ 为什么if(a==b | c)&&;(d!=0){operation 1}默认运行,但(a==e | | f)&&;(d!=0){op2}是否被忽略?,c++,C++,所以,我运行了一些代码,我让它工作了,但我有两个if-else语句 比方说 if (( a == 'b'||'c') && (d!=0)) { // do operation1; } else if (( a == 'e'||'f') && (d!=0)) { // do operation2; } 默认情况下,当我的代码以这种方式构造时,将运行操作1。默认是什么意思?如果我试着输入“e”或“f”,它会执行操作1,就像我输入了“b”或“c” 但

所以,我运行了一些代码,我让它工作了,但我有两个if-else语句

比方说

if (( a == 'b'||'c') && (d!=0)) {
    // do operation1;
} else if (( a == 'e'||'f') && (d!=0)) {
    // do operation2; 
}
默认情况下,当我的代码以这种方式构造时,将运行操作1。默认是什么意思?如果我试着输入“e”或“f”,它会执行操作1,就像我输入了“b”或“c” 但后来我尝试了一些不同的东西

if ((a == 'b') || (a == 'c') && (b != 0)) {
    // do operation 1;
} else if ((a == 'e') || (a == 'f') && (b!= 0)) {
    // do operation 2;
}
现在,请参阅操作1和2是否按预期工作

为什么会发生这种情况

a == 'e'||'f' 
不是在做你认为它在做的事情。”f'作为布尔值,因为它大于值0,因此将始终被视为true。尝试以下方法

a == 'e' || a == 'f'

这两组代码之间的最大区别不是(括号),而是“==”的用法

对于语言行为问题,您确实应该标记您正在使用的语言。许多编程语言都有
if-else
,而且许多语言至少使用了与您所展示的语法相似的东西。我的错。语言是c++,顺便说一句,这是一个常见问题——我们有一个语言不可知的元答案……嗯,实际上,我在想,但这是不平等的版本。(另请参见上的)您的代码不可编译。C++中,如果在其条件下需要一对<代码>()<代码>。发布一些更有意义的东西。