鱼C论坛

 找回密码
 立即注册
查看: 2211|回复: 4

while和while;的区别在哪?

[复制链接]
发表于 2011-11-24 11:44:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 surongre 于 2011-11-24 13:19 编辑
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n=0;
  5. while(n++<3);
  6. printf("n is %d\n",n);
  7. getchar();
  8. printf("That's all this program does,\n");
  9. return 0;
  10. }
复制代码
其中while(n++<3)如果后面没加分号,会输出3个printf语句,但是加上分号后,n的值就等于4了
用汇编查看了下,下面是有分号的:

while带分号

while带分号




下面是没分号的:

while没带分号

while没带分号



有带分号的while语句多出个jmp指令,正常来说while;应该表示空语句,对应的汇编代码应该是nop,但为什么会变成jmp啊?
导致循环多出一次

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-24 13:19:00 | 显示全部楼层
搞明白了,其实没有多出一次循环,n自增了4次,如果在循环体外打印n的值,n是4.要是在循环体内打印n的值,因为第四次自增后大于3,所以退出循环,就打印出1,2,3


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-24 15:50:08 | 显示全部楼层
本帖最后由 阿飞 于 2011-11-24 15:50 编辑

首先: while后面括号里的条件若成立,就会执行while之后的循环体!不成立则跳出循环体。

分析:
1)没有分号的while(n++<3)
第一次条件成立,会执行printf语句,此时n=1;
第二次条件成立,会执行printf语句,此时n=2;        
第三次条件成立,会执行printf语句,此时n=3;                                                   
第四次条件不成立,不执行printf语句,直接执行后面的getchar();语句
2)有分号的while(n++<3);
前三次条件成立,只是while语句后面的分号也代表一条语句,只是这条语句没有内容,就是空语句。
经过前面的三次循环后,在第四次执行while时,条件不成立,不执行后面的空语句,但n还是会自增,就是n的值变成了4,接下来执行后面的printf语句,即输出n的值,....

PS:
这样说应该能理解了吧?
语句组织的不是很通顺,LZ看里面的意思啊!嘿嘿!
所以



                                                   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-24 16:22:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-24 19:25:32 | 显示全部楼层
搞明白了就好
;空语句,
while; 是一个语句。。
printf不再循环内了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 16:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表