9 、break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,此时需要用到C语言提供的break和continue关键字。
break只能用于循环和switch语句中,continue只能用于循环中
break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环(注意:break语句只能跳出一层循环)
continue的作用是跳过本次循环后边的代码,在for循环和while循环中有所差异。
9.1while循环中的break和continue
9.1.1break举例
cpp
//while循环中break
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
break;//当i==5时,就执行break,循环就终止了
}
printf("%d ", i);
i += 1;
}
return 0;
}
结果:

代码分析:
上述代码打印了1 2 3 4后,当i==5时,循环执行break语句,循环结束,跳出循环。
所以break的作用就是永久的终止循环,只要break被执行,break外的第一层循环就终止了
因此,以后在循环中,如果想在某种条件下终止循环,则就可以使用break循环。
9.1.2continue举例
continue是继续的意思,在循环中的作用就是跳过本次循环中continue后边的代码,继续进行下一次循环的判断。
示例:
cpp
//while循环中的continue
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
continue;//当i==5时,就执行continue
}
printf("%d ", i);
i += 1;
}
return 0;
}
结果:

执行上述代码时,虽然结果输出了1 2 3 4,但是代码一直陷入了死循环的状态,这是因为:i==5时,就执行continue,直接跳过了continue之后的代码,而直接去执行while后边的代码:i<=10;因为此时i==5,所以去执行i<=10时,始终是真的结果,所以这就是为什么代码会陷入死循环状态的原因。
continue的作用就是可以帮助我们跳过某一次循环continue后边的代码,直接到循环的判断部分,尽心下一次循环的判断,如果循环的调整是在continue后边的话,可能会造成死循环。
9.2for循环中的break和continue
9.2.1break
for循环break与while中的break一样,是用来终止循环的。不管循环需要执行多少次,只要执行了break语句,循环就彻底终止,跳出循环。
cpp
//for循环中的break
#include<stdio.h>
int main()
{
for (int i = 1; i <= 6; i++)
{
if (i == 3)
break;
printf("%d ", i);
}
return 0;
}
结果:

9.2.2continue
cpp
//for循环中的continue
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 6;i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
结果:

对于for循环中的continue语句,continue语句作用是跳过本次循环后的代码,直接去到循环的调整部分。(这是与while中的continue语句的区别)
注意:do... while语句中的break语句和continue语句的作用与while循环中的一样
9.3 总结:
while中的continue和for中的continue有区别:
对于while中的continue,continue被执行后,就去执行while中的判断语句。
而对于for中的continue,continue被执行后,就去执行for后的调整语句。
break只能用于循环和switch语句中;而continue只能用于循环中。
10、循环的嵌套
目前学习了三种循环的方法:for循环、while循环 、do while循环,C语言中是支持这三种循环之间相互嵌套的。
练习:找出100~200之间的素数,如果是素数,直接打印在屏幕上(素数即质数,只能被1和本身整数的数字)
思路:假设100~200之间任意的一个数为num,那么可以让num去除2~num-1之间中的数,如果num整除了2~num-1中的数(即:num%...==0)
那num就不是质数。
代码实现:
cpp
//循环嵌套求100~200之间的质数
#include<stdio.h>
int main()
{
int x = 100;
int flag = 1;//可以标记该数是不是质数,如果是质数,flag=1,如果不是质数,则flag=0
//拿到100~200之间的数字
for (x = 100; x <= 200; x++)
{
flag = 1;
//拿到2~num-1的数字
for (int j = 2; j <= x - 1;j++)
{
if (x % j == 0)
{
flag = 0;//说明当前该x不是质数
}
}
if (flag == 1)
{
printf("%d\n", x);
}
}
return 0;
}
结果:

11、goto语句
C语言中提供了一种非常特别的语法,就是goto语句和跳转符号,goto语句可以实现在一个函数内跳转到设置好的标号处。
注意:goto语句只能在本函数内部进行跳转。
示例代码:
cpp
//goto语句
#include<stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
结果:

goto语句如果使用不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程。
示例:
cpp
//goto语句使用不当会导致死循环
#include<stdio.h>
int main()
{
again:
printf("11");
printf("22");
goto again;
return 0;
}
上述代码在执行的过程中会导致死循环:

因此,在写代码的时候,尽量不适用goto语句。
但是goto语句也不是一无是处,比如:在多层循环的代码中,如果想快速跳出循环,那么此时使用goto语句就非常方便。
示例:
cpp
//在多层for循环中使用goto语句
#include<stdio.h>
int main()
{
for (...)
{
for (..)
{
,,,,
}
,,,
for (..)
{
if (事件发生)
goto error;
}
}
error:
....
return 0;
}
在上述多层嵌套循环中,使用goto语句就非常方便(因为:使用goto语句就可以一步跳出循环,如果要使用break语句进行跳出循环的话,一个break只能跳出一层for循环,所以在多层嵌套循环中,使用goto语句就非常方便)