C语言中continue和break有何区别?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 C语言 正文

核心区别

一句话概括:

c语言continue break
(图片来源网络,侵删)
  • break跳出整个循环,循环立即终止,执行循环后面的代码。
  • continue跳过本次循环,立即结束本次循环的剩余部分,直接进入下一次循环的判断。

break 语句

break 语句有两个主要用途:

  1. switch 语句中:用于终止 switch 语句的执行,跳出 switch 结构。
  2. 在循环中:用于立即终止 for, while, do-while 循环的执行。

在循环中的用法

break 在循环内部执行时,程序会立即跳出当前所在的循环,不再执行循环体中剩余的语句,也不会再进行循环条件的判断。

示例:查找数组中第一个负数并退出

#include <stdio.h>
int main() {
    int numbers[] = {2, 5, 8, -3, 10, 15, -7};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    printf("正在查找第一个负数...\n");
    for (int i = 0; i < size; i++) {
        if (numbers[i] < 0) {
            printf("找到第一个负数: %d\n", numbers[i]);
            break; // 找到后立即跳出 for 循环
        }
        printf("检查了 %d\n", numbers[i]);
    }
    printf("循环已结束,\n");
    return 0;
}

输出:

c语言continue break
(图片来源网络,侵删)
正在查找第一个负数...
检查了 2
检查了 5
检查了 8
找到第一个负数: -3
循环已结束。

分析:i=3 时,numbers[3]-3,条件 numbers[i] < 0 为真,break 被执行。for 循环立即终止,后续的 10, 15, -7 都不再被检查。


continue 语句

continue 语句只能在循环(for, while, do-while)内部使用,它的作用是跳过本次循环continue 语句之后的所有代码,直接进入下一次循环的迭代。

  • 对于 for 循环:执行 continue 后,会先执行 for 循环的增量表达式i++),然后再判断循环条件。
  • 对于 whiledo-while 循环:执行 continue 后,直接跳转到循环条件的判断部分。

示例:打印 1 到 10 之间除了 5 以外的所有数字

#include <stdio.h>
int main() {
    printf("打印 1 到 10,跳过 5:\n");
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            printf("跳过 5\n");
            continue; // 跳过本次循环的剩余部分(即 printf("%d\n", i);)
        }
        printf("%d\n", i);
    }
    return 0;
}

输出:

c语言continue break
(图片来源网络,侵删)
打印 1 到 10,跳过 5:
1
2
3
4
跳过 5
6
7
8
9
10

分析:i 的值等于 5 时,if 条件为真,continue 语句被执行,程序跳过了 printf("%d\n", i);,直接进行 i++,然后判断 i <= 10 是否成立,继续下一次循环,所以数字 5 没有被打印出来。


对比总结

特性 break continue
作用 终止整个循环 跳过本次循环
循环行为 循环立即结束,执行循环后面的代码 结束本次迭代,开始下一次迭代
影响范围 跳出其所在的最内层循环或 switch 只影响其所在的当前循环
典型场景 找到目标后无需再遍历、遇到错误时退出 跳过不符合条件的特定情况、进行下一次处理

重要注意事项:嵌套循环

breakcontinue 都只对它们所在的最内层循环生效。

示例:嵌套循环中的 break

#include <stdio.h>
int main() {
    for (int i = 1; i <= 3; i++) {
        printf("外层循环 i = %d\n", i);
        for (int j = 1; j <= 3; j++) {
            if (j == 2) {
                break; // 这个 break 只会跳出内层 for 循环
            }
            printf("  内层循环 j = %d\n", j);
        }
    }
    return 0;
}

输出:

外层循环 i = 1
  内层循环 j = 1
外层循环 i = 2
  内层循环 j = 1
外层循环 i = 3
  内层循环 j = 1

分析: break 只结束了 j 循环,外层的 i 循环不受影响,继续执行。

如何跳出多层循环? 如果需要跳出多层循环,通常有以下几种方法:

  1. 使用 goto 语句(简单直接,但有时被认为会破坏代码结构)。
  2. 使用标志位:设置一个布尔变量,在 break 后,外层循环通过检查这个标志位来决定是否退出。
  3. 将循环封装成函数:在函数内部使用 return 来退出整个函数,从而跳出所有循环。

breakswitch 语句中的用法

这是 break 最经典的用法之一,用于防止case 穿透

#include <stdio.h>
int main() {
    int grade = 'B';
    switch (grade) {
        case 'A':
            printf("优秀!\n");
            break; // 如果没有 break,程序会继续执行 case 'B' 的代码
        case 'B':
            printf("良好!\n");
            break;
        case 'C':
            printf("及格.\n");
            break;
        default:
            printf("无效等级.\n");
    }
    return 0;
}

输出:

良好!

分析: grade 的值是 'B',程序进入 case 'B',打印 "良好!",然后遇到 break,立即退出整个 switch 语句,如果没有 break,它会继续执行 case 'C'default 的代码,这通常不是我们想要的结果。

  • break 是一个“终结者”,它彻底结束一个循环或 switch 语句。
  • continue 是一个“跳板”,它让循环跳过当前这一次,直接开始下一次。

理解并正确使用这两个关键字,可以让你的循环逻辑更加清晰和高效。

-- 展开阅读全文 --
头像
dede5.7如何统计当前栏目及下级内容数?
« 上一篇 前天
后台删文章后,记录为何仍存在?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]