0

#include <stdio.h>


void main()
{
 int a = 11, b = 5;
 if(a == 7 || 10){
     printf("True");
 }
 else
 printf("False");
}

这是我的问题,我在一个问题中看到它,并被问到输出是什么。我说错了,但答案是真的,我试图理解为什么因为 a 不等于其中任何一个,而它为真的条件是 a 至少等于其中一个

4

3 回答 3

3

if 语句中的表达式

if(a == 7 || 10){

相当于

if( ( a == 7 ) || ( 10 ) ){

As10不等于,0则逻辑 OR 运算符的第二个操作数||始终计算为逻辑真。因此,if 语句中使用的整个表达式具有逻辑真结果。

事实上 asa不等于7(由于它的初始化)那么上面的 if 语句等价于

if( 10 ){
于 2021-03-31T20:33:10.920 回答
1

这个:

if (a == 7 || 10)

不测试是否等于a7 或 10。

==如果两个操作数相等,则运算符将评估为 1,否则为 0 。如果||至少一个操作数非零,则运算符将计算为 1,否则计算为 0。

此外,相等运算符的优先级高于逻辑 OR 运算符。所以上面的解析为:

if ((a == 7) || 10)

a==7因此,如果计算结果为非零或计算结果为非零,则表达式将为真10。后者为真,因此条件为真。

于 2021-03-31T20:33:24.993 回答
1

这是一个逻辑错误。您键入它的方式不检查是否 a == 7 或 a == 10(如您所愿),而是仅检查 a == 7 和第二个条件 if (10) 是否始终为真。

修复实际上非常简单:

void main()
{
 int a = 11, b = 5;
 if(a == (7 || 10)){
     printf("True");
 }
 else
 printf("False");
}
于 2021-04-01T06:36:24.100 回答