逻辑AND运算符

我对逻辑运算符很困惑。 我有这两行代码。 这里numj都是int。 我有一种情况,两个条件都满足,但我不知道为什么它不打印j的值。 任何人都可以指出错误吗? 提前致谢。

 if(k==1 && num%j==0) printf("%d",j); 

在简单的英语中,表达式k == 1 && num % j == 0是真的,当且仅当k等于1 而且除以j除以j的余数为0.我可以说更多。

这里有两种可能性。 要么你永远不会到达printf ,要么输出永远不会到达你。

对于第一种情况,你确定k == 1num % j == 0 ? 在测试中给我们实际的数值值可能有所帮助。 请注意,如果k是一个浮点数,它是计算的结果,它可能会略微偏离1.0,并且条件将返回false。

对于第二种情况,您如何测试? 这应该打印出j的值,但它不会刷新输出,所以如果程序exception终止或者程序结束时控制台消失或你可能看不到它。 尝试printf("%d\n", j); 甚至fflush(stdout); 确保输出在控制台或终端上可见。

如果条件为真,则代码中没有问题。

在这里检查输出。

您可能还想添加else语句。 我无法计算这次发生在我身上的次数。 至少在编码的初始阶段,这是一个很好的做法。 做这个:

这将帮助您解决问题

 if(k==1 && num%j==0) printf("%d",j); else { printf("%d \n",k); printf("%d \n",num); printf("%d \n",j); printf("%d \n",(num%j)); } 

你的代码运行正常,看看这个测试用例:

http://ideone.com/1gz8R

所以问题不在于这两条线。 尝试在进入这些行之前打印所涉及的三个值,您可能会对您看到(或看不到)的内容感到惊讶。

你也应该养成使用括号的习惯,imo:

 if(k == 1 && (num % j == 0)) 

至少。