C语言for循环中continue如何跳转到循环条件判断?

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

continue 是什么?

continue 是一个控制流语句,在循环(包括 forwhiledo-while)中使用,当程序执行到 continue 时,会立即终止**当前这次循环的剩余代码,并直接跳转到循环的下一次迭代**(即执行 i++,然后判断循环条件)。

c语言for循环 continue
(图片来源网络,侵删)

continue 的作用就是:跳过本次循环,直接开始下一次循环。


for 循环中 continue 的工作流程

一个标准的 for 循环结构如下:

for (初始化表达式; 条件表达式; 更新表达式) {
    // 循环体
    // ...
    // ...
}

当循环体内部遇到 continue 时,执行流程会变成这样:

  1. 执行 初始化表达式 (只执行一次)。
  2. 判断 条件表达式
    • 如果为假,循环结束。
    • 如果为真,进入循环体。
  3. 执行循环体中的代码。
  4. 如果在循环体中执行了 continue,程序会立即跳转到第 5 步,跳过循环体中 continue 之后的所有代码
  5. 执行 更新表达式 (i++)。
  6. 返回第 2 步,继续判断条件,开始下一次循环。

流程图:

c语言for循环 continue
(图片来源网络,侵删)
      +-----------------+
      |  初始化表达式    |
      +--------+--------+
               |
               v
      +--------+--------+
      |  判断条件表达式  |
      +--------+--------+
               |
         +-----+-----+
         |  为真?    |
         +-----+-----+
               | 是
               v
      +--------+--------+
      |  执行循环体      |
      +--------+--------+
               |
      +--------+--------+
      |  遇到 continue?  |
      +--------+--------+
               | 是
               +-----------------+
                                 |
                                 v
      +--------+--------+      +-----------------+
      |  执行更新表达式  | <----+
      +-----------------+
               |
               v
      (返回到 "判断条件表达式")

代码示例

通过几个例子,你可以更直观地理解 continue 的作用。

示例 1:跳过偶数

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

#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        // i 是偶数 (即 i % 2 == 0)
        if (i % 2 == 0) {
            // 跳过本次循环的剩余部分,直接进入下一次循环
            continue;
        }
        // 只有当 i 是奇数时,这行代码才会被执行
        printf("%d ", i);
    }
    return 0;
}

输出结果:

1 3 5 7 9 

分析:

c语言for循环 continue
(图片来源网络,侵删)
  • i 是 2, 4, 6, 8, 10 时,if 条件为真,continue 被执行,程序跳过 printf 语句,直接执行 i++,然后开始下一次循环。
  • i 是 1, 3, 5, 7, 9 时,if 条件为假,continue 不会被执行,程序继续执行 printf 语句。

示例 2:跳过特定输入

从用户输入中读取 5 个数字,但跳过所有负数,只计算并输出正数的和。

#include <stdio.h>
int main() {
    int number, sum = 0;
    printf("请输入 5 个整数:\n");
    for (int i = 1; i <= 5; i++) {
        printf("请输入第 %d 个数: ", i);
        scanf("%d", &number);
        // 如果输入的数字是负数,就跳过
        if (number < 0) {
            printf("跳过负数 %d\n", number);
            continue;
        }
        // 只有当数字非负时,才执行下面的累加操作
        sum += number;
    }
    printf("\n所有正数的和是: %d\n", sum);
    return 0;
}

可能的运行情况:

请输入 5 个整数:
请输入第 1 个数: 10
请输入第 2 个数: -5
跳过负数 -5
请输入第 3 个数: 20
请输入第 4 个数: -2
跳过负数 -2
请输入第 5 个数: 8
所有正数的和是: 38

分析:

  • 当用户输入 -5 时,if 条件满足,continue 被执行,程序跳过了 sum += number; 这一行,直接等待下一次输入。
  • 当用户输入 10, 20, 8 时,if 条件不满足,continue 不执行,程序会正常累加这些数字到 sum 中。

continuebreak 的关键区别

初学者经常混淆 continuebreak,它们的作用完全不同。

特性 continue break
作用 跳过本次循环,继续下一次循环。 终止整个循环,跳出循环体,执行循环后面的代码。
影响范围 只影响当前循环。 终止它所在的最近的一层循环。
for 循环中 执行 continue 后,会执行更新表达式 (如 i++)。 执行 break 后,不会执行更新表达式,循环直接结束。

对比示例:

#include <stdio.h>
int main() {
    printf("--- 使用 continue 的示例 ---\n");
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            continue; // 跳过 i=3 的本次循环
        }
        printf("continue: i = %d\n", i);
    }
    printf("\n--- 使用 break 的示例 ---\n");
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            break; // 当 i=3 时,整个循环终止
        }
        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

最佳实践和注意事项

  1. 避免过度使用:虽然 continue 很方便,但过度使用会使代码逻辑变得难以理解。continue 后面的代码很长,或者 if 条件很复杂,代码会变得很混乱,有时,用 if-else 结构会更清晰。

    • 不推荐(可读性差):
      for (...) {
          if (条件1) continue;
          if (条件2) continue;
          if (条件3) continue;
          // 执行主要逻辑
      }
    • 推荐(更清晰):
      for (...) {
          if (条件1 || 条件2 || 条件3) {
              // 处理特殊情况
          } else {
              // 执行主要逻辑
          }
      }
  2. 注意循环的“前进”:在 for 循环中,continue 会先执行更新部分,但在 whiledo-while 循环中,continue 会直接跳到条件判断,不会自动更新循环变量,如果你在循环体中修改了变量,要确保逻辑正确,否则可能导致无限循环。

    while 循环中的 continue 示例:

    int i = 0;
    while (i < 5) {
        if (i == 2) {
            i++; // 必须手动更新,否则会死循环
            continue;
        }
        printf("%d ", i);
        i++;
    }
    // 输出: 0 1 3 4

continue 是一个强大的工具,可以让你在循环中优雅地处理异常情况或跳过不符合条件的元素,理解它与 break 的区别,并谨慎使用,能让你的 C 语言代码更加健壮和清晰。

-- 展开阅读全文 --
头像
unsigned char与char有何本质区别?
« 上一篇 12-12
dede arclist index标签如何正确调用?
下一篇 » 12-12

相关文章

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

目录[+]