《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
1、引入
就比如在前面章节 (2.18)switch 判断语句 一节中,我们讲到了 break,用它来跳出 switch 语句。
break 也同样适用循环结构,使用 while 或 for 循环时,如果想提前结束循环
(在不满足结束条件的情况下结束循环),可以使用 break 或 continue 以及 goto 关键字
。
1.1、循环控制语句
循环控制语句改变你代码的执行顺序
。通过它你可以实现代码的跳转。
C 提供了下列的循环控制语句:
控制语句 | 描述 |
---|---|
break 语句 | 终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。 |
continue 语句 | 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。 |
goto 语句 | 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。 |
2、break 语句
2.1、break 语句语法
break;
2.2、break 语句两种用法
- (1)当 break 语句出现在
一个循环内
时,当前的这个循环会立即终止
,且程序流将继续执行紧接着循环的下一条语句。
而且它可用于终止 switch 语句中的一个 case。
- (2)如果您使用的是
嵌套循环(即一个循环内嵌套另一个循环)
,break 语句会停止执行最内层的循环
,然后开始执行该块之后的下一行代码。
2.3、流程图
2.4、实例
当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
2.4.1、例子 1
使用 while 循环计算 1 加到 100 的值:
#include <stdio.h>
int main()
{
int i=1, sum=0;
while(1) { //循环条件为死循环
sum+=i;
i++;
if (i>100)
break;
}
printf("%d\n", sum);
return 0;
}
运行结果:
5050
详细解释: while 循环条件为 1,是一个死循环
。当执行到第 100 次 循环的时候,计算完 i++;
后 i 的值为 101
,此时 if 语句的条件 i > 100 成立,执行break;语句,结束循环
。
注意:
:在多层循环中,一个 break 语句只向外跳一层。
2.4.2、例子 2
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 1;
/* while 循环执行 */
while ( a < 10 )
{
printf("a 的值: %d\n", a);
a++;
if ( a > 5)
{
/* 使用 break 语句终止循环 */
break;
}
}
return 0;
}
运行结果:
a 的值: 1
a 的值: 2
a 的值: 3
a 的值: 4
a 的值: 5
详细解释:
打印了 1,2,3,4,5
后,当 a 大于 5
的时候,循环遇到 break 语句的地方终止
,不再打印,不再循环。
所以 break 的作用就是终止循环,只要 break 被执行,break 外的第⼀层循环就终止了
。
2.4.3、例子 3
输出一个 4*4 的整数矩阵:
#include <stdio.h>
int main()
{
int i=1, j;
while(1) { // 外层循环
j=1;
while(1) { // 内层循环
printf("%-4d", i*j);
j++;
if (j>4)
break; //跳出内层循环
}
printf("\n");
i++;
if (i>4)
break; // 跳出外层循环
}
return 0;
}
运行结果:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
详细解释:
- 当 j>4 成立时,执行
break;,跳出内层循环
; - 外层循环依然执行,直到 i>4 成立,跳出外层循环;
- 内层循环共执行了 4 次,外层循环共执行了 1 次。
那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。
3、continue 语句
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue 语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。
3.1、continue 语句语法
continue;
3.2、流程图
3.3、实例
#include <stdio.h>
int main()
{
char c = 0;
while(c!='\n') { //回车键结束循环
c=getchar(); //getchar获取键盘输入的值
if (c=='4' || c=='5') { //按下的是数字键4或5
continue; //跳过当次循环,进入下次循环
}
putchar(c);
}
return 0;
}
运行结果:
0123456789↙
01236789
详细解释: 程序遇到 while 时,变量 c 的值为'\0'
,循环条件c!='\n'
成立,开始第一次循环。getchar() 使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。
本例我们输入的是 0123456789,当读取到 4 或 5 时,if 的条件c=='4'||c=='5'
成立,就执行 continue 语句,结束当前循环,直接进入下一次循环,也就是说putchar(c);
不会被执行到。而读取到其他数字时,if 的条件不成立,continue 语句不会被执行到,putchar(c);
就会输出读取到的字符。
注意:
对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do…while 循环,continue 语句重新执行条件判断语句。
4、break 和 continue 语句对比
举个简单的例子:
在输出 1-10 的整数程序里,在 i==5 的地方加一个 break 语句,代码和结果如下
#include <stdio.h>
int main()
{
int i = 1;
for (i=1; i<=10; i++) {
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
运行结果:
1 2 3 4
分析:
在 i==5 的 if 语句条件成立时,执行了 break 语句退出了当前的循环
,下一句执行 return 0 退出。
可知:
break 的作用是永久的终止循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使用 break 来完成。
上⾯的代码,如果把 break 换成 continue 会是什么结果呢?
#include <stdio.h>
int main()
{
int i = 1;
for (i=1; i<=10; i++) {
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
运行结果:
1 2 3 4 6 7 8 9 10
分析:
这里程序执行到 i == 5 的时候,使用 continue 跳过后边打印的代码
,所以就只打印了 1~10 中非 5 的倍数的数字。
所以在 for 循环中 continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分
。
可知:
未来我们在循环中,当某个条件发⽣的时候,本次循环⽆需再执行后续某些操作的时候,就可以使用 continue 来实现。
5、goto 语句和标号
C 语⾔提供了⼀种非常特别的语法,就是 goto 语句和跳转标号,goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。
语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。
5.1、goto 语句语法
goto label;
..
label: statement;
在这里,label 可以是任何除 C 关键字以外的纯文本,它可以设置在 C 程序中 goto 语句的前面或者后面。
5.2、流程图
5.3、实例
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
运行结果:
hehe
跳过了haha的打印
注意:
在任何编程语言中,都不建议使用 goto 语句
。因为 goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;
但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使用 goto 就非常的方便了。
如下:
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
本来 for 循环想提前退出得使用 break,⼀个 break 只能跳出⼀层 for 循环,如果 3 层循环嵌套就得使用 3 个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。
《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介
每日一更!
公众号、优快云等博客:小菜狗编程笔记
谢谢点赞关注哈!目前在飞书持续优化更新~
日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!