C语言中continue语句的具体用法有哪些?

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

continue 是什么?

continue 是一个控制流语句,它的作用是立即终止当前正在执行的循环体的剩余部分,并直接跳转到循环条件判断部分,准备进行下一次循环。

continue的用法c语言
(图片来源网络,侵删)

你可以把它想象成在循环执行过程中说:“这次就到这里吧,直接开始下一次循环,不要再执行下面的代码了。”


工作原理

continue 语句只能在 forwhiledo-while 循环内部使用。

它的工作流程如下:

  1. 执行循环体:程序从循环的开头开始执行。
  2. 遇到 continue:在循环体的任何位置,如果执行到了 continue 语句...
  3. 立即跳转:程序会立即跳过当前循环体中 continue 语句之后的所有代码。
  4. 进入下一次迭代:程序直接跳转到循环的“更新”部分(对于 for 循环)或“条件判断”部分(对于 whiledo-while 循环),开始下一次循环的执行。

重要区别:continue vs break

这是一个非常容易混淆的点,必须清晰区分:

语句 作用 影响范围
break 完全终止整个循环,循环不再执行,程序 flow 跳转到循环语句的下一条语句。 跳出整个循环
continue 跳过本次循环的剩余部分,直接进入下一次循环。 跳入下一次循环

在不同循环中的具体用法

a) 在 for 循环中

for 循环中,continue 会跳过循环体剩余的代码,然后直接执行 for 循环的 第三个表达式(即“更新”部分),然后再进行条件判断。

示例代码:

#include <stdio.h>
int main() {
    printf("--- 在 for 循环中使用 continue ---\n");
    for (int i = 0; i < 10; i++) {
        // i 是 3 或 5,就跳过本次循环的剩余部分
        if (i == 3 || i == 5) {
            continue; // 跳转到 i++ 的部分
        }
        printf("i = %d\n", i);
    }
    return 0;
}

执行结果:

--- 在 for 循环中使用 continue ---
i = 0
i = 1
i = 2
i = 4  // i=3 时被跳过
i = 6  // i=5 时被跳过
i = 7
i = 8
i = 9

分析:i 的值变为 3 时,if 条件成立,continue 被执行,程序立即跳过 printf 语句,直接执行 for 循环的 i++i 变为 4,进入下一次循环。i=5 的情况同理。

b) 在 while 循环中

while 循环中,continue 会跳过循环体剩余的代码,然后直接跳转到循环的条件判断部分。

⚠️ 潜在陷阱: 如果在 while 循环中,continue 的判断条件没有包含能够改变循环变量的语句,就可能会导致无限循环

示例代码(正确用法):

#include <stdio.h>
int main() {
    int i = 0;
    printf("--- 在 while 循环中使用 continue ---\n");
    while (i < 10) {
        if (i == 3 || i == 5) {
            i++; // 必须在这里递增,否则会死循环
            continue;
        }
        printf("i = %d\n", i);
        i++; // 正常递增
    }
    return 0;
}

分析: 如果去掉 if 语句块里的 i++,当 i 变为 3 时,continue 被执行,程序跳到 while (i < 10) 判断,因为 i 仍然是 3,条件永远为真,循环永远不会结束,变成死循环。

c) 在 do-while 循环中

do-while 的工作方式与 while 类似。continue 会跳过循环体剩余的代码,然后直接跳转到条件判断部分。

⚠️ 同样需要注意陷阱,确保循环变量能被更新以避免无限循环。


典型应用场景

continue 最常见的用途是过滤跳过不符合特定条件的迭代。

场景1:跳过偶数

#include <stdio.h>
int main() {
    printf("--- 打印 1 到 10 之间的奇数 ---\n");
    for (int i = 1; i <= 10; i++) {
        // i 能被 2 整除(即 i 是偶数),就跳过
        if (i % 2 == 0) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

输出:

--- 打印 1 到 10 之间的奇数 ---
1 3 5 7 9 

场景2:处理数组时跳过无效数据

假设你有一个整数数组,你需要对其中所有正数进行求和,遇到负数或零就忽略。

#include <stdio.h>
int main() {
    int numbers[] = {10, -5, 20, 0, 15, -8, 30};
    int sum = 0;
    int count = sizeof(numbers) / sizeof(numbers[0]);
    printf("--- 对数组中的正数求和 ---\n");
    for (int i = 0; i < count; i++) {
        // 如果数字小于等于 0,就跳过本次循环
        if (numbers[i] <= 0) {
            continue;
        }
        // 只有正数才会执行到这里
        sum += numbers[i];
        printf("累加 %d, 当前和: %d\n", numbers[i], sum);
    }
    printf("\n最终的正数总和为: %d\n", sum);
    return 0;
}

输出:

--- 对数组中的正数求和 ---
累加 10, 当前和: 10
累加 20, 当前和: 30
累加 15, 当前和: 45
累加 30, 当前和: 75
最终的正数总和为: 75

场景3:多层循环中的 continue

continue 默认只作用于它所在的最近的一层循环,如果你想在嵌套循环中跳过外层循环的某次迭代,你需要使用 continue带标签形式。

语法:

label:
    for (...) {
        // ...
        if (condition) {
            continue label; // 跳转到 label 标记的循环的下一次迭代
        }
        // ...
    }

示例代码:

#include <stdio.h>
int main() {
    // 外层循环控制行
    for (int i = 1; i <= 3; i++) {
        // 内层循环控制列
        for (int j = 1; j <= 3; j++) {
            // i 和 j 相等,就跳过外层循环的本次迭代
            if (i == j) {
                continue; // 这里的 continue 只作用于内层循环,效果等同于 break
                          // 如果想作用于外层循环,需要使用标签
            }
            printf("i = %d, j = %d\n", i, j);
        }
    }
    printf("\n--- 使用标签的 continue ---\n");
    outer_loop: // 定义一个标签
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            if (i == j) {
                continue outer_loop; // 跳转到 outer_loop 标记的循环,即外层循环的下一次迭代
            }
            printf("i = %d, j = %d\n", i, j);
        }
    }
    return 0;
}

输出分析: 第一个不带标签的 continue 只会结束内层循环的本次迭代,所以当 i=j 时,它只是跳过了 printf,内层循环会继续 j++。 第二个带标签的 continue outer_loop,当 i=j 时,它会直接跳转到外层循环的 i++ 部分,内层循环完全终止。


总结与最佳实践

特性 描述
作用 跳过当前循环的剩余代码,直接进入下一次循环迭代。
位置 只能在 for, while, do-while 循环内部使用。
break 的区别 break 是跳出整个循环,continue 是跳入下一次循环。
while/do-while 中的陷阱 确保在 continue 之前或通过 continue 的逻辑能更新循环控制变量,否则可能导致无限循环。
嵌套循环 默认只作用于最近的一层循环,使用带标签的 continue 可以控制外层循环。
代码风格 continue 可以使代码更清晰,尤其是在复杂的条件判断中,但过度使用可能会使逻辑变得难以跟踪,应适度使用。

核心思想: continue 是一个强大的工具,用于实现“如果发生某种情况,就忽略剩下的处理,直接进入下一次循环”的逻辑,正确理解和使用它,能让你的 C 语言代码更加简洁和高效。

-- 展开阅读全文 --
头像
织梦头部Flash如何修改?
« 上一篇 02-12
dede 自定义表单 查询
下一篇 » 02-12
取消
微信二维码
支付宝二维码

目录[+]