| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:一个奇怪的现象,帮解释!
只看楼主 加入收藏
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
 问题点数:0 回复次数:11 
一个奇怪的现象,帮解释!

有个程序如下: #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 小弟不才,问了这些小问题,请解释,谢谢!

搜索更多相关主题的帖子: 解释 解释 现象 解释 现象 现象 
2005-03-14 17:05
sxlengwa
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-2-24
收藏
得分:0 

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

后面那些都一样


?上帝啊!还是高兴点吧!
2005-03-14 17:14
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 
问题是:if语句后加上;就变成赋值语句了吗,另是否在if语句中的赋值与关系符有先后顺序吗(要不如何解释上面程序的输出结果,感觉很纳闷,因为书上都没有这样说明的)。
2005-03-15 10:02
xyj
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-3-14
收藏
得分:0 
if();是空语句

岂能尽如人意,但求无愧于心!
2005-03-15 10:24
poppylx
Rank: 1
等 级:新手上路
帖 子:367
专家分:0
注 册:2004-9-27
收藏
得分:0 
如二楼所说   if中的都是赋值语句   但并不是所有的赋值语句都是真
x=0这个就假
而在if后的分号 表示if判断为真时 不做任何操作
还有就是 逻辑运算符的问题
   表达式3=(表达式1&amp;&amp;表达式2)   如果表达式1为假时  这时表达式3直接为假  不对表达式2进行判断
   表达式3=(表达式1||表达式2)      如果表达式1为真  表达式3直接为真   不对表达式2进行判断
这就是为什么得到这样结果的原因

动于心而静如水
2005-03-15 11:15
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 

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

[QUOTE]

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

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

再次谢谢!

2005-03-15 11:41
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
现有两个问题:
  1:为何在每个if语句后都有一个;
  2:其输出的结果为:
                               2,2,2
                               0,1,1
                               2,1,1
                               0,2,1
                               0,1,2
小弟不才,问了这些小问题,请解释,谢谢!
回答第一个问题:如果在每个if后面有个;表示如果为真那么执行空语句

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2005-03-15 11:52
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
第二个问题就好解释了,因为if();“;”后面的语句与if没有一点关系的,所以结果就那样了

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2005-03-15 11:53
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用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()中的括号内容无关,也不影响其括号的内容


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-03-15 11:55
poppylx
Rank: 1
等 级:新手上路
帖 子:367
专家分:0
注 册:2004-9-27
收藏
得分:0 
c语句可以分为以下5类:
1,控制语句      2 函数调用语句    3 表达式语句    4 空语句       5 复合语句      (&lt;c程序设计&gt;---谭好强  P49)
  空语句: 即只有一个分号的语句,他什么也不做.有时用来做被转向点,或循环语句中的循环体(循环体是空语句,表示循环体什么也不做)
PS:  还有些时候 用来表示留一个空位    为以后扩展程序用的

好多字啊    照书打字真累

动于心而静如水
2005-03-15 11:59
快速回复:一个奇怪的现象,帮解释!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023716 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved