《小菜狗 C 语言入门 + 进阶笔记》(0)(22)详解循环的 break 和 continue【易错点】

《小菜狗 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/后期小程序和机器学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜狗编程笔记

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值