1. 前言
今天我们继续上期的分支循环语句,来聊聊循环语句中break和continue这两大“门将”。
2.break和continue语句
在
循环执⾏的过程中
,如果某些状况发⽣的时候
,
需要提前终⽌循环
,这是⾮常常见的现象。C语⾔中提供了
break
和
continue
两个关键字
,来帮我们实现这一需求
。
•
break
的作用是用于永久的终止循环,只要
break
被执行,直接就会跳出循环,继续往后执行。
•
continue
的作用是
跳过本次循环 continue 后边的代码
,在 for 循环和 while 循环中有所差异
下面我们从实例中具体感受下。
3.while循环中的break和continue
3.1break举例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5时,执行break语句,直接跳出while循环
printf("%d ", i);
i = i+1;
}
return 0;
}
打印了1,2,3,4后,当i等于5的时候,if语句控制的break语句执行,直接跳出while循环,不再打印5及其后面的数字。所以 b
reak 的作用就是永久终⽌循环
,只要 break 被执行, break
外的第⼀层循环就终⽌了(即break语句只能跳出
它所在的最近的一层循环
)
。所以后我们在循环中,想在某种条件下终⽌循环,则可以使用break 来达到我们想要的效果。
3.2continue举例
continue 是在英语中是继续的意思,在循环中的作用就是
跳过本次循环中 continue 后边的代码,继续进行下⼀次循环的判断
。 如果将上面的代码中的break换成continue,又将产生怎样的效果呢?
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
//当i等于5时,执⾏continue,直接跳过此时continue后面的代码,进入while循环的判断部分
printf("%d ", i);
i = i+1;
}
return 0;
}
因为这里的continue跳过了while循环的调整部分(i = i+1),所以i一直等于5,程序陷⼊死循 环。到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进行下⼀次循环的判断,如果循环的调整部分是在 continue 后边的话,可能会造成死循环。
4.for循环中的break和continue
4.1break举例
其实
和 while 循环中的 break ⼀样
,for 循环中的 break 也是⽤于终止循环的,不管循环还需
要进行多少次,
只要执行到了 break ,循环就彻底终止
,我们上代码。
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
}
break 的作用是永久终止循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以 使用 break来实现。
4.2continue举例
与break语句不同,for循环中的continue与while循环中的还是有一些出入的,下面我们通过代码来具体观察下。
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的代码,来到了for循环的调整部分(i++)
printf("%d ", i);
}
return 0;
}
所以在 for 循环中
continue 的作⽤是跳过本次循环中 continue 后的代码
,
直接去到循环的调
整部分
。未来当某个条件发生的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤
continue 来实现。
对比while和for循环中运用continue语句后代码的执行流程及其运行结果,我们不难发现,产生产生差异的主要原因是while循环中的continue跳过了其调整部分;而for循环由于其调整部分分布在循环体外,从而使得continue无法跳过其调整部分所导致的。
5.do while 循环中的break和continue
5.1break举例
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
5.2continue举例
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
do while 循环中的break和continue与while循环中的几乎相同,这里就不在赘述
6.分支循环番外篇——goto语句
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;//此时的跳转标号后面是“分号”
printf("haha\n");
next://此时的跳转标号为“冒号”
printf("跳过了haha的打印\n");
return 0;
}
goto语句如同传送门一样,通常情况下我们的程序只能一行一行地执行,但一旦进入传送门,程序就直接可以到达我们想去的位置。在一些特殊情况下,可以提高程序的运行效率。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
通常来讲多层
for
循环嵌套想要提前退出得使用
break
,而⼀个
break
只能跳出⼀层
for
循环,如果n层循环嵌套就得使用n个break
才能跳出循环,但是在这种情况下我们使用
goto 语句便会直接跳转到标号处,更加快捷。
但goto语句是一把双刃剑,
如果goto 语句如果使用不当,就会导致在函数内部随意跳转,打乱程序的执行流程,所以还是慎用为好!
7.总结
分支循环语句这一篇章在C语言中有着举足轻重的地位。熟能生巧,这需要我们在平时写代码的过程中不断运用,勇于尝试,概括总结,在今后实现一些程序时时能够信手拈来!