当前位置: 代码迷 >> C语言 >> 一个奇怪的现象,帮解释!
  详细解决方案

一个奇怪的现象,帮解释!

热度:120   发布时间:2005-03-14 17:05:00.0
一个奇怪的现象,帮解释!

有个程序如下: #include<stdio.h> main() { int x,y,z;

x=1;y=1;z=1; if((x=2)&&(y=2)&&(z=2)); printf("%d,%d,%d\n",x,y,z);

x=1;y=1;z=1; if ((x=0)&&(y=2)&&(z=2)); printf("%d,%d,%d\n",x,y,z);

x=1;y=1;z=1; if ((x=2)||(y=2)||(z=2)); printf("%d,%d,%d\n",x,y,z);

x=1;y=1;z=1; if ((x=0)||(y=2)||(z=2)); printf("%d,%d,%d\n",x,y,z);

x=1;y=1;z=1; if ((x=0)&&(y=2)||(z=2)); printf("%d,%d,%d\n",x,y,z); getch(); } 现有两个问题: 1:为何在每个if语句后都有一个; 2:其输出的结果为: 2,2,2 0,1,1 2,1,1 0,2,1 0,1,2 小弟不才,问了这些小问题,请解释,谢谢!

搜索更多相关的解决方案: 解释  解释  现象  解释  现象  现象  

----------------解决方案--------------------------------------------------------

if括弧里面是赋值,所以永真; 将if括弧里面的赋值改为判断if((x==2)&&(y==2)&&(z==2)); printf("%d,%d,%d\n",x,y,z);

后面那些都一样


----------------解决方案--------------------------------------------------------
问题是:if语句后加上;就变成赋值语句了吗,另是否在if语句中的赋值与关系符有先后顺序吗(要不如何解释上面程序的输出结果,感觉很纳闷,因为书上都没有这样说明的)。
----------------解决方案--------------------------------------------------------
if();是空语句
----------------解决方案--------------------------------------------------------
如二楼所说   if中的都是赋值语句   但并不是所有的赋值语句都是真
x=0这个就假
而在if后的分号 表示if判断为真时 不做任何操作
还有就是 逻辑运算符的问题
设   表达式3=(表达式1&amp;&amp;表达式2)   如果表达式1为假时  这时表达式3直接为假  不对表达式2进行判断
而   表达式3=(表达式1||表达式2)      如果表达式1为真  表达式3直接为真   不对表达式2进行判断
这就是为什么得到这样结果的原因
----------------解决方案--------------------------------------------------------

谢谢各位的见解,但我觉的这样的问题还是无聊,大家还是按规范书写吧。另

[QUOTE]

[/QUOTE]而在if后的分号 表示if判断为真时 不做任何操作,

这是在哪里见到的,我还不懂呢。

再次谢谢!


----------------解决方案--------------------------------------------------------
现有两个问题:
  1:为何在每个if语句后都有一个;
  2:其输出的结果为:
                               2,2,2
                               0,1,1
                               2,1,1
                               0,2,1
                               0,1,2
小弟不才,问了这些小问题,请解释,谢谢!
回答第一个问题:如果在每个if后面有个;表示如果为真那么执行空语句
----------------解决方案--------------------------------------------------------
第二个问题就好解释了,因为if();“;”后面的语句与if没有一点关系的,所以结果就那样了
----------------解决方案--------------------------------------------------------
以下是引用lmr在2005-3-15 11:41:02的发言:

谢谢各位的见解,但我觉的这样的问题还是无聊,大家还是按规范书写吧。另

>而在if后的分号 表示if判断为真时 不做任何操作,

这是在哪里见到的,我还不懂呢。

再次谢谢!

这并不是规范不规范书写的问题,你对 = , == ,&&及空语句的使用没有正确及完整地理解。 =是赋值,如:x=2;则将 2 这个值赋给 x,而x=2是个表达式,这个表达式本身也有值,那就是 2 请注意,这是两个不同的概念,虽然值相同 ==是比较,x==2是比较X是否为2,与赋值不同,不对x的内容进行改变,x==2这个表达式也有值,它有一个1或0(即真或假)的值 &&要注意的是个短路操作符 ;空语句相当NULL,即什么都不干,与前面的if()中的括号内容无关,也不影响其括号的内容


----------------解决方案--------------------------------------------------------
c语句可以分为以下5类:
1,控制语句      2 函数调用语句    3 表达式语句    4 空语句       5 复合语句      (&lt;c程序设计&gt;---谭好强  P49)
  空语句: 即只有一个分号的语句,他什么也不做.有时用来做被转向点,或循环语句中的循环体(循环体是空语句,表示循环体什么也不做)
PS:  还有些时候 用来表示留一个空位    为以后扩展程序用的

好多字啊    照书打字真累
----------------解决方案--------------------------------------------------------
  相关解决方案