c语言中continue

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

continue 是什么?

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

continue 语句在循环中被执行时,循环体中 continue 之后的代码将不会被执行,程序会直接开始下一次循环的迭代。


continue 的工作原理

continue 只能在 forwhiledo-while 循环内部使用,它不能在 switch 语句外使用(尽管可以在 switch 内部使用,但需要配合循环)。

工作流程图

graph TD
    A[循环开始] --> B{执行循环体代码};
    B --> C{是否遇到 continue?};
    C -- 是 --> D[跳过本次循环剩余代码];
    D --> E[进入下一次循环迭代];
    C -- 否 --> F{执行循环体剩余代码};
    F --> E;
    E --> G{循环条件是否成立?};
    G -- 是 --> B;
    G -- 否 --> H[循环结束];

continue 在不同循环中的具体行为

a) 在 for 循环中

for 循环中,执行 continue 后,程序会:

  1. 立即跳转到 for 循环的增量表达式increment_expression,即 for 语句中的第三个部分)。
  2. 执行增量表达式。
  3. 然后跳转到条件表达式condition_expression,即 for 语句中的第二个部分)进行判断。
  4. 如果条件为真,则开始下一次循环。

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

#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            // 当 i 等于 5 时,跳过本次循环的剩余代码(即 printf)
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

执行过程:

  1. i 从 1 到 4,if 条件不满足,正常打印 1 2 3 4
  2. i 变为 5,if 条件满足,执行 continue
  3. 程序跳过 printf("%d ", i);,直接执行 i++for 循环的增量部分)。
  4. 然后判断 i <= 10i 是 6),条件为真,继续循环。
  5. 后续 i 从 6 到 10,正常打印 6 7 8 9 10

输出结果:

1 2 3 4 6 7 8 9 10

b) 在 whiledo-while 循环中

whiledo-while 循环中,执行 continue 后,程序会:

  1. 立即跳转到循环条件进行判断。
  2. 如果条件为真,则开始下一次循环。

示例:使用 while 循环,跳过负数

#include <stdio.h>
int main() {
    int i = 0;
    while (i < 10) {
        i++; // 必须在 continue 之前递增,否则会陷入死循环
        if (i % 2 == 0) {
            // 跳过偶数
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

执行过程:

  1. i 从 0 开始。
  2. i++i 变为 1。if (1 % 2 == 0) 为假,打印 1
  3. i++i 变为 2。if (2 % 2 == 0) 为真,执行 continue
  4. 程序直接跳转到 while (i < 10) 进行判断。i 仍然是 2。
  5. i++i 变为 3。if (3 % 2 == 0) 为假,打印 3
  6. ...以此类推。

输出结果:

1 3 5 7 9

⚠️ 重要警告:在 whiledo-while 循环中使用 continue 时要格外小心!

continue 之前的代码没有改变循环变量的值,continue 跳过了改变循环变量的代码,那么循环条件将永远不变,导致无限循环

错误示例:

int i = 0;
while (i < 10) {
    if (i == 5) {
        continue; // 死循环!i 永远是 5,永远不会执行到 i++
    }
    i++;
    printf("%d ", i);
}

continuebreak 的区别

初学者经常混淆 continuebreak,它们有本质的不同:

特性 continue break
作用 跳过本次循环的剩余部分,进入下一次循环。 完全终止跳出整个循环。
影响范围 只影响当前循环。 终止最近的 forwhiledo-whileswitch 语句。
循环次数 循环的总次数不变,只是跳过了某几次的执行。 提前结束循环,循环的总次数会减少。

示例对比:

#include <stdio.h>
int main() {
    printf("--- 使用 continue ---\n");
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            continue;
        }
        printf("continue: i = %d\n", i);
    }
    printf("\n--- 使用 break ---\n");
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            break;
        }
        printf("break: i = %d\n", i);
    }
    return 0;
}

输出结果:

--- 使用 continue ---
continue: i = 1
continue: i = 2
continue: i = 4
continue: i = 5
--- 使用 break ---
break: i = 1
break: i = 2

可以看到,continue 跳过了 i=3 的打印,但循环继续,而 breaki=3 时直接终止了整个循环,i=4i=5 的代码再也没有机会执行。


嵌套循环中的 continue

continue 出现在嵌套循环中时,它只影响包含它的最近的一层循环

示例:

#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) {
                continue; // 这个 continue 只影响内层 for 循环
            }
            printf("  内层循环 j = %d\n", j);
        }
    }
    return 0;
}

输出结果:

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

j == 2 时,continue 跳过了内层循环的 printf 语句,然后继续执行内层循环的下一次迭代,外层循环不受任何影响。


continue 的最佳实践与注意事项

  1. 提高可读性continue 可以用来处理“异常”或“特殊情况”,从而减少代码的嵌套层级,使“正常逻辑”更清晰。

    • 不推荐(深层嵌套):
      for (...) {
          if (condition1) {
              // ... 很多代码
          } else {
              // ... 正常逻辑
          }
      }
    • 推荐(扁平化逻辑):
      for (...) {
          if (condition1) {
              continue; // 快速跳过异常情况
          }
          // ... 这里只写正常逻辑,代码更清晰
      }
  2. 避免过度使用continue 用得太多,会导致逻辑变得分散,难以追踪,如果循环体很短,或者逻辑很简单,直接使用 if-else 可能更直观。

  3. 注意 whiledo-while 循环:如前所述,在这两种循环中使用 continue 前,确保循环变量已经被正确更新,否则极易造成死循环。

  4. goto 比较continue 是一种结构化的跳转,比 goto 更安全、更易于理解,你可以用 continue 来模拟 goto 的某些用法,但通常 continue 是更好的选择。

continue 是 C 语言中一个非常有用的控制流工具,它允许你灵活地控制循环的执行流程。

  • 核心功能:跳过本次循环剩余代码,进入下一次迭代。
  • 适用场景:当遇到特定条件时,你不想执行循环体中的剩余代码,但又希望循环继续下去。
  • 关键区别:它不同于 breakbreak 是彻底终止循环。
  • 使用要点:在 while/do-while 中要小心防止死循环;在嵌套循环中,它只作用于最近的循环。

掌握 continue 可以帮助你写出更简洁、更高效的循环代码。

-- 展开阅读全文 --
头像
求一元二次方程的根c语言
« 上一篇 今天
dede 注册页面修改
下一篇 » 今天

相关文章

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

目录[+]