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

continue 就像一个“跳板”,当程序执行到它时,会跳过当前循环体中 continue 语句之后的所有代码,直接进入下一次循环。
continue 的工作原理
continue 只能在循环语句(for, while, do-while)内部使用,它在不同循环中的行为略有不同:
-
在
for循环中:- 执行到
continue。 - 跳过当前循环体中剩余的代码。
- 直接执行
for循环的increment(递增) 部分。 - 然后执行
condition(条件) 判断,决定是否进入下一次循环。
- 执行到
-
在
while和do-while循环中:
(图片来源网络,侵删)- 执行到
continue。 - 跳过当前循环体中剩余的代码。
- 直接跳转到循环的
condition(条件) 判断部分,决定是否进入下一次循环。
- 执行到
continue 与 break 的关键区别
这是一个非常重要的知识点,初学者很容易混淆它们。
| 特性 | continue |
break |
|---|---|---|
| 作用 | 跳过本次循环的剩余部分,进入下一次迭代。 | 完全跳出整个循环,循环不再执行。 |
| 影响范围 | 只影响当前循环。 | 只影响当前循环(不适用于 switch 语句)。 |
| 执行后 | 循环继续。 | 循环终止。 |
一个生动的比喻:
想象你在跑圈(循环)。
continue就像是你跑到某个点时,不小心摔了一跤,你爬起来,从摔倒的地方继续跑下一圈,你没有放弃整个跑步任务。break就像是你跑到某个点时,突然觉得太累了,决定彻底放弃跑步,离开跑道,你的跑步任务就此结束。
代码示例
通过例子是理解 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;
}
执行流程分析:
i = 1:1 % 2 != 0,不执行if,打印1。i = 2:2 % 2 == 0,执行continue。跳过printf,直接执行i++(i 变为 3)。i = 3:3 % 2 != 0,不执行if,打印3。- ... 以此类推。
输出结果:
打印 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;
}
执行流程分析:
- 如果用户输入
5,num是 5。if (num < 0)和if (num == 0)都不成立,执行count++。 - 如果用户输入
0,num是 0,第二个if成立,执行continue。跳过count++,直接回到while(1)开始下一次循环。 - 如果用户输入
-10,num是 -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,这会跳过内层循环的printf,j变为 3,继续执行内层循环。 - 外层循环不受影响,会正常进行下一次迭代。
输出结果:
--- 外层循环 i = 1 ---
内层循环 j = 1
内层循环 j = 3
--- 外层循环 i = 2 ---
内层循环 j = 1
内层循环 j = 3
--- 外层循环 i = 3 ---
内层循环 j = 1
内层循环 j = 3
如果你想从嵌套循环中跳出外层循环,continue 是做不到的,需要使用 goto 语句(虽然不推荐,但这是少数合适场景之一)或者重构代码。
使用 continue 的最佳实践和注意事项
-
避免滥用:
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 { // 主要逻辑在这里 } }
- 可读性差:
-
注意
for循环的递增部分:在for循环中,continue会执行递增部分,如果你想在满足某个条件时不递增,continue就不适用了,应该使用if-else结构。 -
清晰的意图:使用
continue时,要确保它的目的是明确的,即“跳过当前不符合条件的项”。
continue 是 C 语言中一个非常有用的控制流工具,它允许你优雅地处理循环中的特殊情况,跳过不需要处理的迭代,从而让代码更简洁、意图更明确。
记住它的核心作用:跳过本次,进入下一次,并时刻将它与 break(跳出整个循环)区分开来,在适当的时候使用它,可以大大提高代码的可读性和效率。
