if ((a % 5) && (a % 11))
printf("The number %d is divisible by 5 and 11\n", a);
else
printf("%d number is not divisible by 5 and 11\n", a);
&&
如果我不添加表达式,逻辑运算符将如何工作== 0
,如果没有余数,它会寻找商吗?并且商将始终是非零项,因此程序将始终返回 true。
if ((a % 5) && (a % 11))
printf("The number %d is divisible by 5 and 11\n", a);
else
printf("%d number is not divisible by 5 and 11\n", a);
&&
如果我不添加表达式,逻辑运算符将如何工作== 0
,如果没有余数,它会寻找商吗?并且商将始终是非零项,因此程序将始终返回 true。
在您的代码中
if ((a % 5) && (a % 11))
是相同的
if ( ((a % 5) != 0) && ((a % 11) != 0 ) )
任何非零值都被视为TRUTHY。
根据 C 标准(6.5.13 逻辑与运算符)
3 如果 && 运算符的两个操作数比较不等于 0,则 && 运算符将产生 1;否则,它产生 0。结果具有 int 类型。
在 if 语句中使用的表达式中
if ((a % 5) && (a % 11))
如果每个操作数a % 5
和a % 11
不等于 0,则表达式的计算结果为逻辑真。也就是说,当a
不能被整除5
且不能被整除时,11
表达式的计算结果为真,因此在该语句中输出错误消息
printf("The number %d is divisible by 5 and 11\n", a);
要使输出正确,您应该按以下方式更改 if 语句中的表达式。请注意,您还需要在 printf 的第二次调用中更改消息。
if ((a % 5 == 0) && (a % 11 == 0 ))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
printf("The number %d is divisible by 5 and 11\n", a);
else
printf("%d number is either not divisible by 5 or by 11\n", a);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@Saurav的回答最能描述您的问题。除此之外,如果您想要一个解决方案以防万一您不想添加== 0
,那么您可以简单地使用!
(NOT) 运算符:
if (!(a % 5) && !(a % 11))
现在它divisible
只会在两个表达式都有零值时显示(即没有余数 - 就像数字一样55
)。