一、总论
在C语言中,如果某些状况发生时,需要提前终止循环,有两个关键字break和continue,他们都是都是控制流语句,作用都是改变程序的执行流程,但它们的方式和作用是不同的。下面我来和大家探讨一下
二、细则
1.break
break语句让外围 for,while或 do while循环或者 switch语句终止。多用于条件表达式和条件语句终止循环。用于强制退出当前循环或switch语句,即当满足某个条件时,程序会立即跳出循环或停止执行switch语句的分支,不再执行循环体内或switch语句后面的代码。
注意:break语句不像goto语句能够打破多重嵌套循环,仅仅会跳出内测的循环语句而不会一下子跳出外侧的循环语句。
2.continue
continue语句可以跳过for,while或do while循环中该层循环的剩余部分,直接进入循环的下一个。,在使用条件语句忽略循环剩余部分显得笨拙时使用。用于强制退出当前循环分支之后的部分从而进行循环的下一个分支,即当满足某个条件时,程序会立即跳出当先循环分支而继续进行下一个循环分支,不再执行本层循环分支后面的代码。
注意:switch语句不支持continue。continue语句在for循环和while循环中有所差异。
三、联系与区别
1:联系
我们都知道,两者都可以控制循环语句,都是跳过某些要执行的代码。
2:区别
1)break的作用是用于永久的终止循环。一个break语句只能执行一次,输出结果大多是循环分支中的一个或少量的,不满足条件后面的语句都不用考虑了。
2)continue的作用是跳过本次循环后面的代码而继续执行循环体。而一个continue语句在每个循环分支中都要进行判断,输出结果是较多的。
3)break比continue多一个在switch语句中的用法,这在switch语句中是非常重要的。
具体我在下面的代码中展示。
4)continue语句在for循环和while循环中有所差异。
四、代码示例
1.for循环
1)break语句
#include <stdio.h>
int main()
{
int i=0;
for (i=0; i<10; i++)
{
if (i==5) break; //当i为5时,循环就结束了
printf("%d ",i);
}
return 0;
}
2)continue语句
#include <stdio.h>
int main()
{
int i=0;
for (i=0; i<10; i++)
{
if (i==5) continue;
/*当i为5时,本次为5的循环分支后的语句就结束了
直接来到++的调整部分,还会执行其他小于十的循环分支*/
printf("%d ",i);
}
return 0;
}
2.while(do while)循环
1)break语句
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
if(i==5) break; //当i为5时,循环就结束了
printf("%d ",i);
i++;
}
return 0;
}
这里我们不难看出break语句在while循环和for循环中是没有区别的。
2)continue语句
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
if(i==5) continue;
/*当i为5时,跳过本次循环之后的语句
其中i++也被跳过了*/
printf("%d ",i);
i++;
}
return 0;
}
这里为什么两者一样呢?
我们分析:continue可以帮我们跳过某一次循环后面的代码,进行下一次循环的判断。实例中i++语句就被跳过了。
do-while循环和while循环大体一致,再此不做赘述。
3.注意死循环
因此我们要留意,在while(do while)循环中,如果循环的调整是在continue的后面,有可能会造成死循环。
示例:
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
if(i<1) continue;
printf("%d ",i);
i++;
}
return 0;
}
这就是一个死循环,i=0,会满足if的条件i<1,执行continue从而跳过了i++,i的值一直为0,没有结束循环的语句,为死循环。
因此,我们在设计代码时要在此留一个心眼。
4.循环的嵌套。
示例一:找出100~200之间的素数并打印出来
这里给出一种参考
#include <stdio.h>
int main()
{
int i,j,flag;
for(i=100;i<=200;i++) //循环产生100到200的数字
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag=0;
break;
}
else
flag=1; //判断是否为质数
}
if(flag==1)
printf("%d ",i);
}
return 0;
}
这里的break只能跳出j的这一层循环,对i的循环没有影响。
示例二:利用循环语句输出数组(九九乘法表中去除带4的数)
----------------------------------------->
参考代码
#include<stdio.h>
int main()
{
int i,j,s;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
s=i*j;
if(s%10==4||s/10==4)
{
printf(" "); continue; //跳过输出部分
}
printf("%3d",s);
}
putchar('\n');
}
return 0;
}
5.switch语句中的break
大家可以看看下面的代码输出为什么。
1)
#include<stdio.h>
int main()
{
int i=0;
for(i=0;i<3;i++)
{
switch(i)
{
case 1:printf("%d",i); //注意没有break
case 2:printf("%d",i);
default :printf("%d",i);
}
}
return 0;
}
输出的是011122
没有break每个case分支都会执行
2)
#include<stdio.h>
int main()
{
int i=0;
for(i=0;i<3;i++)
{
switch(i)
{
case 1:printf("%d",i); break; //注意有break
case 2:printf("%d",i); break;
default :printf("%d",i);
}
}
return 0;
}
输出的是012
在使用switch语句时,一定要注意选择性使用break;
写代码是一个不断修改,不断完善的过程。欢迎大家探讨斧正。
且将新火试新茶,诗酒趁年华。