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

改成if(m==0&&n==0) 就正常了 这是为什么

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-03
m==n==0
程序首先判断m==n(关系运算符其值非真(非0)即假(0))是否成立?如你所说m=n=0,所以是m==n是成立的,其值为非0值;
接着判断(非0)==0是否成立,显然是不成立的,所以就不在执行下面的程序了
相似回答
大家正在搜