C语言的continue语句会直接跳过本次循环剩余语句吗?

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

continue 是什么?

continue 是一个控制流语句,用于在循环(for, while, do-while)中提前结束**当前的迭代(或称为“一次循环”),并立即跳转到循环的下一次迭代**的开始处。

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

当你在一个循环的中间执行到 continue 时,循环体中 continue 语句之后的所有代码都将被跳过,循环的“计数器”会更新,然后直接开始下一次循环。


continue 的工作原理

为了更好地理解,我们把它和 break 语句做一个对比:

语句 作用 影响范围
break 完全终止整个循环,程序流程会跳出循环,执行循环后面的下一条语句。 只能用于循环和 switch 语句。
continue 终止当前这一次的循环,跳过本次剩余代码,直接进入下一次循环。 只能用于循环语句。

continue 的执行流程:

  1. 程序在循环体中执行。
  2. 遇到 continue 语句。
  3. 立即跳过 continue 之后的所有代码。
  4. 程序流程直接跳转到循环的条件判断部分(对于 whiledo-while)或者递增/递减表达式(对于 for 循环)。
  5. 如果循环条件仍然满足,则开始下一次迭代;否则,循环结束。

continue 在不同循环中的使用

a) 在 for 循环中

for 循环中,执行 continue 后,会先执行递增/递增表达式 (i++),然后再判断循环条件。

c语言的continue语句
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        // i 是 3 的倍数,就跳过本次循环的剩余部分
        if (i % 3 == 0) {
            printf("跳过 %d\n", i);
            continue; // 跳转到 i++,然后判断 i <= 10
        }
        // 这行代码只有在 i 不是 3 的倍数时才会执行
        printf("当前数字是: %d\n", i);
    }
    return 0;
}

输出结果:

当前数字是: 1
当前数字是: 2
跳过 3
当前数字是: 4
当前数字是: 5
跳过 6
当前数字是: 7
当前数字是: 8
跳过 9
当前数字是: 10

流程分析:

  • i 为 3 时,if 条件成立,执行 continueprintf("当前数字是: %d\n", i); 被跳过,程序直接跳到 i++i 变为 4,然后判断 4 <= 10,继续循环。
  • i 为 10 时,if 条件不成立,正常打印 10i++ 变为 11,判断 11 <= 10 为假,循环结束。

b) 在 while 循环中

while 循环中,执行 continue 后,会直接跳转到循环条件的判断部分。

#include <stdio.h>
int main() {
    int i = 0;
    while (i < 5) {
        i++; // 重要:必须在 continue 之前更新计数器,否则可能造成死循环
        if (i == 3) {
            printf("跳过 %d\n", i);
            continue; // 跳转到 while (i < 5) 的判断
        }
        printf("当前数字是: %d\n", i);
    }
    return 0;
}

输出结果:

c语言的continue语句
(图片来源网络,侵删)
当前数字是: 1
当前数字是: 2
跳过 3
当前数字是: 4
当前数字是: 5

流程分析:

  • i 从 0 开始。
  • 第一次循环:i 变为 1,if 不成立,打印 1
  • 第二次循环:i 变为 2,if 不成立,打印 2
  • 第三次循环:i 变为 3,if 成立,执行 continueprintf 被跳过,直接跳转到 while (i < 5) 判断。i 仍然是 3,条件成立,开始下一次循环。
  • 第四次循环:i 变为 4,if 不成立,打印 4
  • 第五次循环:i 变为 5,if 不成立,打印 5
  • 第六次循环:i 变为 6,while (6 < 5) 为假,循环结束。

⚠️ 重要警告:whiledo-while 循环中,continue 位于更新计数器的语句(如 i++)之后,很可能会导致死循环,上面的例子如果把 i++ 放在 if 后面,当 i==3 时,continue 会跳过 i++,导致 i 永远是 3,循环永远无法退出。

c) 在 do-while 循环中

do-while 的工作方式与 while 类似,continue 也会直接跳转到循环条件的判断部分。

#include <stdio.h>
int main() {
    int i = 0;
    do {
        i++;
        if (i == 2) {
            printf("跳过 %d\n", i);
            continue;
        }
        printf("当前数字是: %d\n", i);
    } while (i < 5);
    return 0;
}

输出结果:

当前数字是: 1
跳过 2
当前数字是: 3
当前数字是: 4
当前数字是: 5

continue 的实际应用场景

continue 最常见的用途是过滤数据跳过特定情况,从而避免使用复杂的嵌套 if-else 语句,使代码更清晰。

示例:计算一个数组中所有正数的平均值

#include <stdio.h>
int main() {
    int numbers[] = {10, -5, 20, 0, 15, -8, 25};
    int count = 0;
    int sum = 0;
    int size = sizeof(numbers) / sizeof(numbers[0]);
    for (int i = 0; i < size; i++) {
        // 如果数字小于等于0,就跳过它,不参与计算
        if (numbers[i] <= 0) {
            continue;
        }
        // 只有正数才会执行到这里
        sum += numbers[i];
        count++;
    }
    if (count > 0) {
        double average = (double)sum / count;
        printf("正数的平均值是: %.2f\n", average);
    } else {
        printf("数组中没有正数,\n");
    }
    return 0;
}

分析:

  • 循环遍历数组中的每一个数字。
  • 当遇到 -5, 0, -8 时,if 条件成立,continue 被执行,跳过 sum += numbers[i];count++; 这两行。
  • 只有 10, 20, 15, 25 会被累加到 sum 中,count 也会相应增加。
  • 最终计算出的平均值是 (10+20+15+25) / 4 = 17.5

如果不使用 continue,代码会变成这样:

// 不使用 continue 的写法(可读性稍差)
for (int i = 0; i < size; i++) {
    if (numbers[i] > 0) { // 只有条件满足时才执行
        sum += numbers[i];
        count++;
    }
}

虽然这个简单的例子两种写法差别不大,但在更复杂的逻辑中,continue 可以通过将“正常流程”放在顶层,将“异常/特殊情况”用 continue 跳过,来显著提高代码的可读性。


特性 描述
作用 在循环中跳过当前迭代的剩余代码,直接开始下一次迭代。
位置 只能用在 for, while, do-while 循环的循环体内。
break 的区别 break 是跳出整个循环;continue 是跳过本次循环。
主要用途 过滤不需要的数据或情况。
避免深层嵌套的 if 语句,使代码更清晰。
注意事项 whiledo-while 循环中,要确保 continue 不会导致计数器无法更新,从而引发死循环。

掌握 continue 语句是编写高效、清晰 C 语言代码的重要一步。

-- 展开阅读全文 --
头像
dede5.7后台页面空白
« 上一篇 02-10
void的return到底该怎么用?
下一篇 » 02-10
取消
微信二维码
支付宝二维码

目录[+]