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

(图片来源网络,侵删)
continue 的作用就是:跳过本次循环,直接开始下一次循环。
for 循环中 continue 的工作流程
一个标准的 for 循环结构如下:
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
// ...
// ...
}
当循环体内部遇到 continue 时,执行流程会变成这样:
- 执行
初始化表达式(只执行一次)。 - 判断
条件表达式。- 如果为假,循环结束。
- 如果为真,进入循环体。
- 执行循环体中的代码。
- 如果在循环体中执行了
continue,程序会立即跳转到第 5 步,跳过循环体中continue之后的所有代码。 - 执行
更新表达式(i++)。 - 返回第 2 步,继续判断条件,开始下一次循环。
流程图:

(图片来源网络,侵删)
+-----------------+
| 初始化表达式 |
+--------+--------+
|
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
分析:

(图片来源网络,侵删)
- 当
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中。
continue 与 break 的关键区别
初学者经常混淆 continue 和 break,它们的作用完全不同。
| 特性 | 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
最佳实践和注意事项
-
避免过度使用:虽然
continue很方便,但过度使用会使代码逻辑变得难以理解。continue后面的代码很长,或者if条件很复杂,代码会变得很混乱,有时,用if-else结构会更清晰。- 不推荐(可读性差):
for (...) { if (条件1) continue; if (条件2) continue; if (条件3) continue; // 执行主要逻辑 } - 推荐(更清晰):
for (...) { if (条件1 || 条件2 || 条件3) { // 处理特殊情况 } else { // 执行主要逻辑 } }
- 不推荐(可读性差):
-
注意循环的“前进”:在
for循环中,continue会先执行更新部分,但在while或do-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 语言代码更加健壮和清晰。
