从单片机基础到程序框架(全集 2019pdf版).pdf - 第211页

} //循环 体结束 【50.2 break 语句。 】 continue 语句 提前结束当 前这一轮的循 环,准备 进入下一 轮的新循环 ,强调“ 某次结束” ,但不是真 结 束。break 语句是直 接跳出当 前循环体,是 真正的结束当 前循环体, 强调循环 体的“生命 结束” 。举 例如下: while(…)或者 f or(…) //循环 体的条件判断 入口处 { //循环体开始 语句 1; 语句 2; break; 语句 3; …

100%1 / 836
第五十节: 循环体内的 continue break 语句。
【50.1 continue 语句。
通常情况下单片机在循环体里从第一行的“入口条件”开始往下执行,直至碰到循环体的边界“底部
花括号”才又折回到第一行的“入口条件”准备进行新一轮的循环。但是,若中途碰 continue 语句,
会提前结束当前这一轮的循环,只要碰到 continue 句,就立即折回到第一行的“入口条件”准备进行新
一轮的循环。注意,continue 语句“结束”的对象仅仅是“当前这一轮的循环”,并没有真正结束这个循环
的生命周期。它好像拦路虎,遇到它,它说“你回去,第二天再来。”这台词里的“第二天再来”就强调这
个循环体的生命周期还没有真正结束。举一个具体的例子,如下:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
continue;
语句 3;
……
语句 N;
} //循环体结束
分析:上述语句中,单片机从“循环体的条件判断入口处开始往下执行,碰到 continue 马上折回
到“循环体的条件判断入口处”继续开始新一轮的循环,因此,这段代码,continue 后面的“语句 3”至
“语句 N”是永远也不会被执行到的。因为 continue 的拦截,上述语句等效于:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
} //循环体结束
问题来了,既然可以如此简化,还 continue 干什么,不是多此一举?在实际应用中,continue 肯定
不会像上面这样单独使用,continue 只有跟 if 语句结合,才有它存在的意义。例如:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
if(某条件)
{
continue
}
语句 3;
……
语句 N;
} //循环体结束
【50.2 break 语句。
continue 语句提前结束当前这一轮的循环,准备进入下一轮的新循环,强调“某次结束”,但不是真
束。break 语句是直接跳出当前循环体,是真正的结束当前循环体,强调循环体的“生命结束”。举例如下:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
break;
语句 3;
……
语句 N;
} //循环体结束
语句(N+1); //循环体之外语句
分析:上述语句中,单片机从“循环体的条件判断入口处”开始往下执行,突然碰到 break 语句,时,
立即无条件跳出当前循环体(无需判 while for 条件直接执行到循环体之外的“语句(N+1)”
break 后面的“语句 3”至“语 N”也没有被执行到。实际项目中,break 往往会配合 if 一起使用,
如:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
if(某条件)
{
break;
}
语句 3;
……
语句 N;
} //循环体结束
语句(N+1); //循环体之外语句
【50.3 break 语句能跳多远?】
break 语句能跳多远?预知答案请先看以下例子:
while(…)
{
语句 1;
语句 2;
while(…)
{
语句 3;
break;
语句 4;
}
语句 5;
}
语句 6;
分析:上述例子中 while 循环里面有藏着第二个 while 循环,像这种循环之中还有循环的情况,
常称为循环嵌套。单片机从上往下执行,当遇 break 后,它会跳到“语句 5”那里呢,还是会跳到“语句
6”那里?正确答案是“语句 5”那里,这说明了 break 语句的“有效射程”仅仅刚好能跳出当前的循环体
也就是说,在上述循环嵌套的例子中,最内层的 break 只能跳出最内层的循环体,不能跳到最外层的“语
6”那里,如果需要继续跳出最外层的“语句 6”那里,可以继续在外层的循环体内再增加一个 break 语句。
【50.4 还有哪些语句可以无条件跳出循环体?】
除了 break 以外,还有 return goto 语句可以跳出循环体。这部分的内容大家只需大概了解一下即可。
return 语句比 break 语句还厉害它不仅仅跳出当前循环体还是跳出了当前函数,也就是提前结束了当前
函数,这部分的内容后面章节会讲到,暂时不用管。而 goto 语句在 C 语言中大家都公认不建议用,因为它
很容易扰乱大家常用的 C 语言编程结构,我本人也从来没有用过 goto 语句,因此不再深入讲解它。
【50.5 例程练习和分析。
编写一个程序来熟悉一下 continue break 语句的使用。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
unsigned char a=0; //观察这个数最后的变化
unsigned char b=0; //观察这个数最后的变化
unsigned char c=0; //观察这个数最后的变化
unsigned char d=0; //观察这个数最后的变化
unsigned char i; //控制循环体的条件判断变量
void main() //主函数
{
//i<6 的条件判断是在进入循环体之前判断,而 i 的自 1 是在执行完一次循环体之后才自加的。
for(i=0;i<6;i++)
{
a=a+1; //被执行了 6 次,分别是第 0,1,2,3,4,5