下面的语句能跳出while吗???

[复制链接]
9724|30
 楼主| areshan 发表于 2010-8-2 10:52 | 显示全部楼层 |阅读模式
本帖最后由 areshan 于 2010-8-2 15:23 编辑

while(1)
  {
    if(volsample==20)
    {
      volsample=0;
      break;
    }
  } //当volsample=20时,把它清零,同时跳出while循环。不知道能不能跳出来,因为有break在if语句中。。。volsample是在定时器中断里不停的累加。
看了各位大侠的回复,怎么更加困惑了。。。。if是判断是不是该结束循环,我认为是可以退出来的。
Metalor 发表于 2010-8-2 10:55 | 显示全部楼层
沙发,同问~~
hxlwjn 发表于 2010-8-2 11:00 | 显示全部楼层
如果你的volsample在其它地方(中断或其它任务)有引用的话,可以跳出循环。
ayb_ice 发表于 2010-8-2 11:04 | 显示全部楼层
xiaoyu9632 发表于 2010-8-2 11:25 | 显示全部楼层
你只要能满足该变量等于20的条件,跳出来毫无问题。
yiyu2010 发表于 2010-8-2 12:19 | 显示全部楼层
注意 volsample 定义
zhujey 发表于 2010-8-2 13:06 | 显示全部楼层
while跳不出吧!!。。
seabada 发表于 2010-8-2 13:41 | 显示全部楼层
volsample=0   在其它子程序中有的话就会跳到那个地方,但是while(1)还是不停检测volsample的
apan 发表于 2010-8-2 14:28 | 显示全部楼层
满足条件时可以跳出while。
救火车 发表于 2010-8-2 14:48 | 显示全部楼层
volsample在哪里增1?  
在中断里吗?
ylsiw 发表于 2010-8-2 14:58 | 显示全部楼层
tcc8073 发表于 2010-8-2 15:01 | 显示全部楼层
只能跳出IF条件语句,不能跳出WHILE循环语句,你要跳出WHILE语句就得有
while
{
   语句;
   ..........;
   break;
}
zjswuyunbo 发表于 2010-8-2 15:56 | 显示全部楼层
14# tcc8073
是吗?
我怎么觉得不是。

晚上,回去实验一下。
biyveddd 发表于 2010-8-2 16:11 | 显示全部楼层
直接仿一下不就行了,这个也问
冷漠 发表于 2010-8-2 16:19 | 显示全部楼层
break;能够跳出的是它所在的第一层循环;LZ的if( )不是循环结构。所以break不作用于if(),
而作用于while(1){ }。



显然,LZ的程序执行到break语句时,就会跳出while(1){ }循环。

本帖子中包含更多资源

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

×
冷漠 发表于 2010-8-2 16:34 | 显示全部楼层
看C51反汇编结果更清楚:

本帖子中包含更多资源

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

×

评分

参与人数 1威望 +1 收起 理由
ElderFox + 1 赞同冷漠哥,不知道多调试下慢慢就知道了。 ...

查看全部评分

my8804 发表于 2010-8-2 16:58 | 显示全部楼层
满足条件后,是可以的
冷漠 发表于 2010-8-2 17:33 | 显示全部楼层

循环体内的if 语句只与循环语句内的复合语句等价!

本帖最后由 冷漠 于 2010-8-2 17:52 编辑

break语句也叫中止语句,是四种跳转语句中的一种,只能在do,fo,与while这三种循环语句以及switch语句中使用,用于退出它所在的switch语句或循环语句,并从下一个语句继续往下执行。例如,如果break语句是一while语句的重复体中的语句,即:
        while (expression 1)
          {
            if (expression2)
               break;
          }
那么它等价于如下语句:
        while (expression 1)
            {
            if (expression2)
                goto exit一point;
                 .........
             }
                 exit一point;

即,break语句的执行效果等价于执行用于转向其所在switch语句或循环语句的下一个语句的goto语句(——如果它所在switch语句或循环语句的复合语句或 if 语句)…………

循环体内的 if 语句只与循环语句内的复合语句等价!与break语句作用域根本无关的。所以只要在循环语句体内任何程序位置执行break语句,都能跳出while(1)循环(单层)——无论if 循环与否。
wink1234 发表于 2010-8-2 17:43 | 显示全部楼层
wink1234 发表于 2010-8-2 17:43 | 显示全部楼层
3g bugou 2g ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部