C语言中 scanf("%d %d",&m,&n); if (m==n==0) XXXXXXX 然而当我输入0 0时 不会执行XXXX

改成if(m==0&&n==0)就正常了这是为什么... 改成if(m==0&&n==0) 就正常了 这是为什么 展开
 我来答
第一碗羊杂割
推荐于2016-02-18 · TA获得超过6145个赞
知道大有可为答主
回答量:1107
采纳率:80%
帮助的人:544万
展开全部

编写程序时请不要为了简便而使用数学的一些写法。诸如

a < b < c 或者 a == b == c

之类的写法和数学中的逻辑是完全不同的。


比如看你这里的

m == n == 0


计算机执行这条判断时其实执行的是

(m == n) == 0

也就是说会分两步走,首先判断 

m == n

的值,如果 m 和 n 相等,那么 m == n 的值就是 true (也就是 1),如果 m 和 n 不等,那么 m == n 的值就是 false (也就是 0)。


得到 m == n 的值后就可以接着判断 

(m == n) == 0

的值了。如上面所说,如果 m 等于 n,那么 m == n 的值就为 1,1 不等于 0,所以

(m == n) == 0

的最终结果就是 false。如果 m 不等于 n,那么 m == n 的值就为 0,0 等于 0,所以

(m == n) == 0

的最终结果就是 true。


也就是说,你这条判断

if (m == n == 0) {...}

 在 m 和 n 的值不等时才会执行,在 m 和 n 的值相等时不会执行。这和你想要实现的效果是完全相反的。所以以后千万不要在编写程序时使用数学连写方法。该使用逻辑运算符 && 或 || 时就一定要使用。

百度网友a5387a8
2015-10-03 · 超过22用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:34.4万
展开全部
m==n==0
程序首先判断m==n(关系运算符其值非真(非0)即假(0))是否成立?如你所说m=n=0,所以是m==n是成立的,其值为非0值;
接着判断(非0)==0是否成立,显然是不成立的,所以就不在执行下面的程序了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式