2010-08-16 243 views
1

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

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

那么,你能告诉我们这种情况吗? :) – fresskoma 2010-08-16 18:45:09

+0

一行代码无法解决问题。你应该更好地描述问题。 – dierre 2010-08-16 18:46:40

+4

要调试此问题,请在条件语句之前打印'k','j','num',甚至可能是'num%j'的值以查看它们的真实含义。然后,如果您仍然卡住,请用铅笔和纸张手工进行评估。 – FrustratedWithFormsDesigner 2010-08-16 18:47:37

回答

6

用简单的英语,表达k == 1 && num % j == 0为真,当且仅当k等于1 其余分裂num通过j是0。没有更多的,我可以说。

1

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

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

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

0

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

检查输出here

0

您可能还想添加一个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)); 
} 
0

你的代码运行正常的问题,看看这个testcase:

http://ideone.com/1gz8R

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

0

你也应该得到使用括号宽松,海事组织的习惯:

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

在最少。

+0

Blech!对我来说,多余的括号会降低可读性,并建议作者不确定他使用的语言是如何工作的。 – 2010-08-16 21:11:32

+1

尽管这是主观的,但我认为像这样的括号只会增加可读性,因为在操作顺序中可能存在歧义。 – Jonathan 2010-08-16 21:57:21

+0

是的,当然这是主观的,但事实上,上述运营商可能被认为是模棱两可的,这说明我对完全不熟悉。忘记使用较少使用(或至少较少混合)的运算符(例如''''''''''''''''''':'和朋友)的优先规则是可以理解的,但是没有什么理由不支持记住简单的例子。他们非常直观。布尔运算符('&&','||')的优先级低于比较运算符('==','<'等)的优先级('&&'是两者中较高的那个),它们低于算术运算符,遵循正常的数学规则。 – 2010-08-16 22:10:32