1

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

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

6 回答 6

6

k == 1 && num % j == 0用简单的英语来说,当且仅当k等于 1并且除以的余数num为0时,表达式才为真j。我不能再说什么了。

于 2010-08-16T18:48:48.420 回答
1

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

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

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

于 2010-08-16T18:49:49.713 回答
0

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

在此处检查输出。

于 2010-08-16T18:53:11.827 回答
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));
} 
于 2010-08-16T19:13:28.000 回答
0

你的代码运行良好,看看这个测试用例:

http://ideone.com/1gz8R

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

于 2010-08-16T19:22:00.820 回答
0

您还应该养成自由使用括号的习惯,imo:

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

至少。

于 2010-08-16T20:59:02.683 回答