问题描述
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逻辑AND运算符)
3如果&&运算符的两个操作数都比较,则应产生1 不等于0;否则,结果为0。结果的类型为int。
在if语句中使用的表达式中
if ((a % 5) && (a % 11))
如果每个操作数a % 5
和a % 11
不等于0,则表达式的计算结果为逻辑真。那就是当a
不能被5
整除并且不能被11
整除时,该表达式的计算结果为true,结果该语句中输出了错误的消息
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
。