Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 逻辑与运算符_C_Boolean Logic_Boolean Operations - Fatal编程技术网

C 逻辑与运算符

C 逻辑与运算符,c,boolean-logic,boolean-operations,C,Boolean Logic,Boolean Operations,我对逻辑AND运算符有点困惑。 我有这两行代码。这里num和j都是int。我有一种情况,这两个条件都满足,但我不知道为什么它不打印j的值。有人能指出错误吗?提前谢谢 if(k==1 && num%j==0) printf("%d",j); 在普通英语中,表达式k==1&&num%j==0为真,当且仅当k等于1且num除以j的余数为0。我能说的不多。简单地说,表达式k==1&&num%j==0为真,当且仅当k等于1且num除以j的余数为0。我没什么可说的。这里有两种可能性

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

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

在普通英语中,表达式
k==1&&num%j==0
为真,当且仅当
k
等于1
num
除以
j
的余数为0。我能说的不多。

简单地说,表达式
k==1&&num%j==0
为真,当且仅当
k
等于1
num
除以
j
的余数为0。我没什么可说的。

这里有两种可能性。要么您永远无法访问
printf
,要么您永远无法获得输出

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


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

这里有两种可能性。要么您永远无法访问
printf
,要么您永远无法获得输出

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


对于第二种情况,您如何测试它?这应该会打印出
j
的值,但不会刷新输出,因此如果程序异常终止,或者控制台在程序结束时离开,或者您可能看不到它。尝试
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));
} 

您可能还需要添加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));
} 

你的代码运行得很好,看看这个


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

您的代码运行良好,请查看以下内容


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

您还应该养成随意使用括号的习惯,我认为:

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

至少。

你还应该养成自由使用括号的习惯,依我看:

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

至少是这样。

那么,你能告诉我们当时的情况吗?:)一行代码无助于解决问题。您应该以更好的方式描述此问题。要调试此问题,请在条件语句之前打印
k
j
num
,甚至可能打印
num%j
的值,以查看它们的真实情况。如果你仍然卡住了,用铅笔和纸手工进行评估。@user417552:既然问题已经解决,要么接受答案,要么删除问题。:)@user417552:另外,我们的好奇心被激发了,我们想知道错误是什么——价值观不是你所期望的,或者输出被某种方式吞没了。那么,你能告诉我们这种情况吗?:)一行代码无助于解决问题。您应该以更好的方式描述此问题。要调试此问题,请在条件语句之前打印
k
j
num
,甚至可能打印
num%j
的值,以查看它们的真实情况。如果你仍然卡住了,用铅笔和纸手工进行评估。@user417552:既然问题已经解决,要么接受答案,要么删除问题。:)@user417552:同时,我们的好奇心被激发了,我们想知道错误是什么-值不是你期望的值,或者输出被某种方式吞没了。天哪!对我来说,多余的括号会降低可读性,并表明作者不确定他使用的语言是如何工作的。虽然这是主观的,但我认为这样的括号只能在操作顺序可能存在歧义时增加可读性。是的,当然是主观的,但事实上,上述运营商可能会被认为是模棱两可的,这让我感到非常不熟悉。忘记使用较少(或至少不太经常混合)的运算符(如
的优先级规则是可以理解的,但就可读性而言,quick,这里发生了什么<代码>如果((a+(2*b))<(foo()-bar())| |((foo()括号汤!讨厌。简单的眼睛无法理解这一点。与
if(a+2*b