#include <stdio.h>
void main()
{
int a = 11, b = 5;
if(a == 7 || 10){
printf("True");
}
else
printf("False");
}
这是我的问题,我在一个问题中看到它,并被问到输出是什么。我说错了,但答案是真的,我试图理解为什么因为 a 不等于其中任何一个,而它为真的条件是 a 至少等于其中一个
#include <stdio.h>
void main()
{
int a = 11, b = 5;
if(a == 7 || 10){
printf("True");
}
else
printf("False");
}
这是我的问题,我在一个问题中看到它,并被问到输出是什么。我说错了,但答案是真的,我试图理解为什么因为 a 不等于其中任何一个,而它为真的条件是 a 至少等于其中一个
if 语句中的表达式
if(a == 7 || 10){
相当于
if( ( a == 7 ) || ( 10 ) ){
As10
不等于,0
则逻辑 OR 运算符的第二个操作数||
始终计算为逻辑真。因此,if 语句中使用的整个表达式具有逻辑真结果。
事实上 asa
不等于7
(由于它的初始化)那么上面的 if 语句等价于
if( 10 ){
这个:
if (a == 7 || 10)
不测试是否等于a
7 或 10。
==
如果两个操作数相等,则运算符将评估为 1,否则为 0 。如果||
至少一个操作数非零,则运算符将计算为 1,否则计算为 0。
此外,相等运算符的优先级高于逻辑 OR 运算符。所以上面的解析为:
if ((a == 7) || 10)
a==7
因此,如果计算结果为非零或计算结果为非零,则表达式将为真10
。后者为真,因此条件为真。
这是一个逻辑错误。您键入它的方式不检查是否 a == 7 或 a == 10(如您所愿),而是仅检查 a == 7 和第二个条件 if (10) 是否始终为真。
修复实际上非常简单:
void main()
{
int a = 11, b = 5;
if(a == (7 || 10)){
printf("True");
}
else
printf("False");
}