continue和break有何本质区别?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 C语言 正文
  • break: 立即终止并跳出当前所在的循环(for, while, do-while)或 switch 语句。
  • continue: 立即跳过当前循环的剩余部分,直接进入下一次循环的判断/迭代阶段。

break 语句

break 的作用就像它的名字一样——“打破”,它会立即终止整个循环的执行,程序流程会继续执行循环体后面的第一条语句。

c语言continue与break
(图片来源网络,侵删)

主要用途:

  1. 在循环中:当满足某个条件时,提前结束整个循环。
  2. switch 语句中:结束 case 分支的执行,防止“case 穿透”(fall-through)。

在循环中的示例:

#include <stdio.h>
int main() {
    int i;
    // 使用 for 循环
    printf("--- 使用 break 的 for 循环 ---\n");
    for (i = 1; i <= 10; i++) {
        if (i == 5) {
            printf("当 i 等于 5 时,break 被执行,循环结束,\n");
            break; // 当 i 为 5 时,循环立即终止
        }
        printf("i = %d\n", i);
    }
    printf("循环已结束,i 的最终值是: %d\n\n", i);
    // 使用 while 循环
    printf("--- 使用 break 的 while 循环 ---\n");
    int j = 1;
    while (j <= 10) {
        if (j == 7) {
            printf("当 j 等于 7 时,break 被执行,循环结束,\n");
            break; // 当 j 为 7 时,循环立即终止
        }
        printf("j = %d\n", j);
        j++;
    }
    printf("循环已结束,j 的最终值是: %d\n", j);
    return 0;
}

输出结果:

--- 使用 break 的 for 循环 ---
i = 1
i = 2
i = 3
i = 4
当 i 等于 5 时,break 被执行,循环结束。
循环已结束,i 的最终值是: 5
--- 使用 break 的 while 循环 ---
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
当 j 等于 7 时,break 被执行,循环结束。
循环已结束,j 的最终值是: 7

分析:for 循环中,当 i 变为 5 时,if 条件成立,break 被执行,程序立即跳出 for 循环,不再执行 i=6i=7 等后续操作。while 循环同理。


continue 语句

continue 的作用是“继续”,它不会终止整个循环,而是会跳过当前循环周期中 continue 语句之后的所有代码,直接进入下一次循环的条件判断和迭代。

主要用途:

当遇到特定条件时,跳过本次循环中剩余的操作,直接开始下一次循环,常用于过滤数据或跳过不符合条件的处理。

c语言continue与break
(图片来源网络,侵删)

在循环中的示例:

#include <stdio.h>
int main() {
    int i;
    // 使用 for 循环
    printf("--- 使用 continue 的 for 循环 ---\n");
    for (i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue; // i 是偶数,跳过下面的打印语句,直接进入下一次循环
        }
        printf("i = %d (奇数)\n", i);
    }
    printf("\n");
    // 使用 while 循环
    printf("--- 使用 continue 的 while 循环 ---\n");
    int j = 0;
    while (j < 10) {
        j++; // 先递增,避免死循环
        if (j % 3 == 0) {
            printf("j = %d 是 3 的倍数,跳过打印,\n", j);
            continue; // j 是 3 的倍数,跳过下面的打印语句
        }
        printf("j = %d\n", j);
    }
    return 0;
}

输出结果:

--- 使用 continue 的 for 循环 ---
i = 1 (奇数)
i = 3 (奇数)
i = 5 (奇数)
i = 7 (奇数)
i = 9 (奇数)
--- 使用 continue 的 while 循环 ---
j = 1
j = 2
j = 3 是 3 的倍数,跳过打印。
j = 4
j = 5
j = 6 是 3 的倍数,跳过打印。
j = 7
j = 8
j = 9 是 3 的倍数,跳过打印。
j = 10

分析:for 循环中,每当 i 是偶数(i % 2 == 0),continue 就会执行,程序会跳过 printf 语句,直接执行 i++ 和下一次循环条件判断 i <= 10,所以只打印了奇数。while 循环的逻辑也类似,它跳过了 3 的倍数的打印。


break vs. continue 对比

特性 break continue
中文含义 打断、终止 继续、跳过
作用范围 终止整个循环或 switch 语句 跳过当前循环的剩余部分
对循环的影响 循环完全结束,程序执行循环后的代码 循环继续进行,进入下一次迭代
在循环中的位置 可以放在循环体的任何位置 只能放在循环体内部,且通常在条件判断之后
比喻 看到红灯,直接停车熄火,不再开。 看到路上的坑,绕过去,继续往前开。

重要注意事项

breakcontinue 只能作用于最近的循环

breakcontinue 只能控制它们所在的最内层循环,如果你在嵌套循环中使用它们,它们只会影响包含它们的那个循环。

示例:嵌套循环中的 break

c语言continue与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);
        }
        printf("  内层循环已结束,\n");
    }
    printf("外层循环已结束,\n");
    return 0;
}

输出结果:

外层循环 i = 1
  内层循环 j = 1
  内层循环已结束。
外层循环 i = 2
  内层循环 j = 1
  内层循环已结束。
外层循环 i = 3
  内层循环 j = 1
  内层循环已结束。
外层循环已结束。

分析:j == 2 时,break 终止的是内层 for (j...) 循环,外层 for (i...) 循环不受影响,继续执行 i=2i=3

如何跳出多层嵌套循环?

如果你需要从多层嵌套循环中跳出来,有几种方法:

  1. 使用 goto 语句:这是最直接的方法,但不被所有程序员喜欢。
  2. 使用标志位:定义一个布尔变量,在需要时设置它,然后在每层循环的开头检查这个变量。
  3. 将循环封装成函数:在函数中使用 return 来退出。

示例:使用 goto 跳出多层循环

#include <stdio.h>
int main() {
    int found = 0; // 标志位
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            if (i == 2 && j == 2) {
                found = 1;
                goto end_loops; // 跳转到标签 end_loops
            }
            printf("(%d, %d) ", i, j);
        }
        printf("\n");
    }
end_loops:
    if (found) {
        printf("\n在 (2, 2) 处找到了目标,已退出所有循环,\n");
    }
    return 0;
}

记住这个简单的区别:

  • 当你想要彻底结束一个循环时,使用 break
  • 当你想要跳过当前这一次循环,但还想继续下一次循环时,使用 continue

理解 breakcontinue 对于编写高效、逻辑清晰的 C 语言代码至关重要,它们是控制程序流程的利器。

-- 展开阅读全文 --
头像
织梦dede模板为何不见?如何找回?
« 上一篇 昨天
dede5.7如何统计当前栏目及下级内容数?
下一篇 » 昨天

相关文章

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

目录[+]