C语言中continue的作用与使用场景是什么?

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

continue 是什么?

continue 是 C 语言中的一个控制流语句,它的作用是立即终止当前循环的本次迭代,并跳转到循环条件判断部分,准备开始下一次迭代。

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

continue 就像一个“跳板”,当程序执行到它时,会跳过当前循环体中 continue 语句之后的所有代码,直接进入下一次循环。

continue 的工作原理

continue 只能在循环语句for, while, do-while)内部使用,它在不同循环中的行为略有不同:

  • for 循环中

    1. 执行到 continue
    2. 跳过当前循环体中剩余的代码。
    3. 直接执行 for 循环的 increment (递增) 部分
    4. 然后执行 condition (条件) 判断,决定是否进入下一次循环。
  • whiledo-while 循环中

    c语言中的continue
    (图片来源网络,侵删)
    1. 执行到 continue
    2. 跳过当前循环体中剩余的代码。
    3. 直接跳转到循环的 condition (条件) 判断部分,决定是否进入下一次循环。

continuebreak 的关键区别

这是一个非常重要的知识点,初学者很容易混淆它们。

特性 continue break
作用 跳过本次循环的剩余部分,进入下一次迭代。 完全跳出整个循环,循环不再执行。
影响范围 只影响当前循环。 只影响当前循环(不适用于 switch 语句)。
执行后 循环继续。 循环终止。

一个生动的比喻:

想象你在跑圈(循环)。

  • continue 就像是你跑到某个点时,不小心摔了一跤,你爬起来,从摔倒的地方继续跑下一圈,你没有放弃整个跑步任务。
  • break 就像是你跑到某个点时,突然觉得太累了,决定彻底放弃跑步,离开跑道,你的跑步任务就此结束。

代码示例

通过例子是理解 continue 最好的方式。

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

示例 1:在 for 循环中使用 continue

打印 1 到 10 之间的所有奇数。

#include <stdio.h>
int main() {
    printf("打印 1 到 10 之间的奇数:\n");
    for (int i = 1; i <= 10; i++) {
        // i 是偶数,就跳过本次循环的后续代码
        if (i % 2 == 0) {
            continue; // 当 i 是 2, 4, 6, 8, 10 时,执行到这里,然后跳转到 i++
        }
        // 只有当 i 是奇数时,这行代码才会被执行
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}

执行流程分析:

  1. i = 1: 1 % 2 != 0,不执行 if,打印 1
  2. i = 2: 2 % 2 == 0,执行 continue跳过 printf,直接执行 i++ (i 变为 3)。
  3. i = 3: 3 % 2 != 0,不执行 if,打印 3
  4. ... 以此类推。

输出结果:

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

示例 2:在 while 循环中使用 continue

从键盘输入,直到用户输入一个负数为止,并统计输入的非负整数个数。

#include <stdio.h>
int main() {
    int num;
    int count = 0;
    printf("请输入整数(输入负数结束):\n");
    while (1) { // 无限循环
        scanf("%d", &num);
        // 如果输入的数是负数,就跳出循环
        if (num < 0) {
            break;
        }
        // 如果输入的数是 0,就跳过本次循环,不进行计数
        if (num == 0) {
            printf("输入了0,不计入总数,\n");
            continue; // 跳过 count++,直接跳转到 while(1) 的条件判断
        }
        // 只有当输入的是正整数时,才执行到这里
        count++;
        printf("当前非负整数计数: %d\n", count);
    }
    printf("程序结束,你总共输入了 %d 个非负整数,\n", count);
    return 0;
}

执行流程分析:

  • 如果用户输入 5num 是 5。if (num < 0)if (num == 0) 都不成立,执行 count++
  • 如果用户输入 0num 是 0,第二个 if 成立,执行 continue跳过 count++,直接回到 while(1) 开始下一次循环。
  • 如果用户输入 -10num 是 -10,第一个 if 成立,执行 break整个 while 循环结束

示例 3: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 只影响内层循环
            }
            printf("内层循环 j = %d\n", j);
        }
    }
    return 0;
}

执行流程分析:

  • i=1, j=2 时,内层循环的 if 条件成立,执行 continue,这会跳过内层循环的 printfj 变为 3,继续执行内层循环。
  • 外层循环不受影响,会正常进行下一次迭代。

输出结果:

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

如果你想从嵌套循环中跳出外层循环,continue 是做不到的,需要使用 goto 语句(虽然不推荐,但这是少数合适场景之一)或者重构代码。

使用 continue 的最佳实践和注意事项

  1. 避免滥用continue 可以使代码逻辑更清晰,但过度使用(尤其是在复杂的循环中)可能会使代码难以理解和跟踪。continue 后面跟着大量代码,不如使用 if-else 结构。

    • 可读性差
      for (...) {
          if (condition_A) continue;
          if (condition_B) continue;
          if (condition_C) continue;
          // 主要逻辑在这里
      }
    • 可读性好
      for (...) {
          if (!condition_A && !condition_B && !condition_C) {
              // 主要逻辑在这里
          }
      }

      或者使用 if-else

      for (...) {
      if (condition_A) {
          // 处理 A
      } else if (condition_B) {
          // 处理 B
      } else if (condition_C) {
          // 处理 C
      } else {
          // 主要逻辑在这里
      }
      }
  2. 注意 for 循环的递增部分:在 for 循环中,continue 会执行递增部分,如果你想在满足某个条件时不递增,continue 就不适用了,应该使用 if-else 结构。

  3. 清晰的意图:使用 continue 时,要确保它的目的是明确的,即“跳过当前不符合条件的项”。

continue 是 C 语言中一个非常有用的控制流工具,它允许你优雅地处理循环中的特殊情况,跳过不需要处理的迭代,从而让代码更简洁、意图更明确。

记住它的核心作用:跳过本次,进入下一次,并时刻将它与 break(跳出整个循环)区分开来,在适当的时候使用它,可以大大提高代码的可读性和效率。

-- 展开阅读全文 --
头像
Windows.h在C语言中如何高效使用?
« 上一篇 今天
C语言return语句如何正确使用与返回?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]