打印

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

[复制链接]
8275|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 | 只看该作者
可以

使用特权

评论回复
5
xiaoyu9632| | 2010-8-2 11:25 | 只看该作者
你只要能满足该变量等于20的条件,跳出来毫无问题。

使用特权

评论回复
6
yiyu2010| | 2010-8-2 12:19 | 只看该作者
注意 volsample 定义

使用特权

评论回复
7
zhujey| | 2010-8-2 13:06 | 只看该作者
while跳不出吧!!。。

使用特权

评论回复
8
seabada| | 2010-8-2 13:41 | 只看该作者
volsample=0   在其它子程序中有的话就会跳到那个地方,但是while(1)还是不停检测volsample的

使用特权

评论回复
9
apan| | 2010-8-2 14:28 | 只看该作者
满足条件时可以跳出while。

使用特权

评论回复
10
救火车| | 2010-8-2 14:48 | 只看该作者
volsample在哪里增1?  
在中断里吗?

使用特权

评论回复
11
ylsiw| | 2010-8-2 14:58 | 只看该作者
可以

使用特权

评论回复
12
tcc8073| | 2010-8-2 15:01 | 只看该作者
只能跳出IF条件语句,不能跳出WHILE循环语句,你要跳出WHILE语句就得有
while
{
   语句;
   ..........;
   break;
}

使用特权

评论回复
13
zjswuyunbo| | 2010-8-2 15:56 | 只看该作者
14# tcc8073
是吗?
我怎么觉得不是。

晚上,回去实验一下。

使用特权

评论回复
14
biyveddd| | 2010-8-2 16:11 | 只看该作者
直接仿一下不就行了,这个也问

使用特权

评论回复
15
冷漠| | 2010-8-2 16:19 | 只看该作者
break;能够跳出的是它所在的第一层循环;LZ的if( )不是循环结构。所以break不作用于if(),
而作用于while(1){ }。



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

使用特权

评论回复
16
冷漠| | 2010-8-2 16:34 | 只看该作者
看C51反汇编结果更清楚:

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
ElderFox + 1 赞同冷漠哥,不知道多调试下慢慢就知道了。 ...
17
my8804| | 2010-8-2 16:58 | 只看该作者
满足条件后,是可以的

使用特权

评论回复
18
冷漠| | 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 循环与否。

使用特权

评论回复
19
wink1234| | 2010-8-2 17:43 | 只看该作者
see...

使用特权

评论回复
20
wink1234| | 2010-8-2 17:43 | 只看该作者
3g bugou 2g ?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝