continue 是什么?
continue 是一个控制流语句,用于在循环(for, while, do-while)中提前结束**当前的迭代(或称为“一次循环”),并立即跳转到循环的下一次迭代**的开始处。

(图片来源网络,侵删)
当你在一个循环的中间执行到 continue 时,循环体中 continue 语句之后的所有代码都将被跳过,循环的“计数器”会更新,然后直接开始下一次循环。
continue 的工作原理
为了更好地理解,我们把它和 break 语句做一个对比:
| 语句 | 作用 | 影响范围 |
|---|---|---|
break |
完全终止整个循环,程序流程会跳出循环,执行循环后面的下一条语句。 | 只能用于循环和 switch 语句。 |
continue |
终止当前这一次的循环,跳过本次剩余代码,直接进入下一次循环。 | 只能用于循环语句。 |
continue 的执行流程:
- 程序在循环体中执行。
- 遇到
continue语句。 - 立即跳过
continue之后的所有代码。 - 程序流程直接跳转到循环的条件判断部分(对于
while和do-while)或者递增/递减表达式(对于for循环)。 - 如果循环条件仍然满足,则开始下一次迭代;否则,循环结束。
continue 在不同循环中的使用
a) 在 for 循环中
在 for 循环中,执行 continue 后,会先执行递增/递增表达式 (i++),然后再判断循环条件。

(图片来源网络,侵删)
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
// i 是 3 的倍数,就跳过本次循环的剩余部分
if (i % 3 == 0) {
printf("跳过 %d\n", i);
continue; // 跳转到 i++,然后判断 i <= 10
}
// 这行代码只有在 i 不是 3 的倍数时才会执行
printf("当前数字是: %d\n", i);
}
return 0;
}
输出结果:
当前数字是: 1
当前数字是: 2
跳过 3
当前数字是: 4
当前数字是: 5
跳过 6
当前数字是: 7
当前数字是: 8
跳过 9
当前数字是: 10
流程分析:
- 当
i为 3 时,if条件成立,执行continue。printf("当前数字是: %d\n", i);被跳过,程序直接跳到i++,i变为 4,然后判断4 <= 10,继续循环。 - 当
i为 10 时,if条件不成立,正常打印10。i++变为 11,判断11 <= 10为假,循环结束。
b) 在 while 循环中
在 while 循环中,执行 continue 后,会直接跳转到循环条件的判断部分。
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
i++; // 重要:必须在 continue 之前更新计数器,否则可能造成死循环
if (i == 3) {
printf("跳过 %d\n", i);
continue; // 跳转到 while (i < 5) 的判断
}
printf("当前数字是: %d\n", i);
}
return 0;
}
输出结果:

(图片来源网络,侵删)
当前数字是: 1
当前数字是: 2
跳过 3
当前数字是: 4
当前数字是: 5
流程分析:
i从 0 开始。- 第一次循环:
i变为 1,if不成立,打印1。 - 第二次循环:
i变为 2,if不成立,打印2。 - 第三次循环:
i变为 3,if成立,执行continue。printf被跳过,直接跳转到while (i < 5)判断。i仍然是 3,条件成立,开始下一次循环。 - 第四次循环:
i变为 4,if不成立,打印4。 - 第五次循环:
i变为 5,if不成立,打印5。 - 第六次循环:
i变为 6,while (6 < 5)为假,循环结束。
⚠️ 重要警告: 在
while和do-while循环中,continue位于更新计数器的语句(如i++)之后,很可能会导致死循环,上面的例子如果把i++放在if后面,当i==3时,continue会跳过i++,导致i永远是 3,循环永远无法退出。
c) 在 do-while 循环中
do-while 的工作方式与 while 类似,continue 也会直接跳转到循环条件的判断部分。
#include <stdio.h>
int main() {
int i = 0;
do {
i++;
if (i == 2) {
printf("跳过 %d\n", i);
continue;
}
printf("当前数字是: %d\n", i);
} while (i < 5);
return 0;
}
输出结果:
当前数字是: 1
跳过 2
当前数字是: 3
当前数字是: 4
当前数字是: 5
continue 的实际应用场景
continue 最常见的用途是过滤数据或跳过特定情况,从而避免使用复杂的嵌套 if-else 语句,使代码更清晰。
示例:计算一个数组中所有正数的平均值
#include <stdio.h>
int main() {
int numbers[] = {10, -5, 20, 0, 15, -8, 25};
int count = 0;
int sum = 0;
int size = sizeof(numbers) / sizeof(numbers[0]);
for (int i = 0; i < size; i++) {
// 如果数字小于等于0,就跳过它,不参与计算
if (numbers[i] <= 0) {
continue;
}
// 只有正数才会执行到这里
sum += numbers[i];
count++;
}
if (count > 0) {
double average = (double)sum / count;
printf("正数的平均值是: %.2f\n", average);
} else {
printf("数组中没有正数,\n");
}
return 0;
}
分析:
- 循环遍历数组中的每一个数字。
- 当遇到
-5,0,-8时,if条件成立,continue被执行,跳过sum += numbers[i];和count++;这两行。 - 只有
10,20,15,25会被累加到sum中,count也会相应增加。 - 最终计算出的平均值是
(10+20+15+25) / 4 = 17.5。
如果不使用 continue,代码会变成这样:
// 不使用 continue 的写法(可读性稍差)
for (int i = 0; i < size; i++) {
if (numbers[i] > 0) { // 只有条件满足时才执行
sum += numbers[i];
count++;
}
}
虽然这个简单的例子两种写法差别不大,但在更复杂的逻辑中,continue 可以通过将“正常流程”放在顶层,将“异常/特殊情况”用 continue 跳过,来显著提高代码的可读性。
| 特性 | 描述 |
|---|---|
| 作用 | 在循环中跳过当前迭代的剩余代码,直接开始下一次迭代。 |
| 位置 | 只能用在 for, while, do-while 循环的循环体内。 |
与 break 的区别 |
break 是跳出整个循环;continue 是跳过本次循环。 |
| 主要用途 | 过滤不需要的数据或情况。 避免深层嵌套的 if 语句,使代码更清晰。 |
| 注意事项 | 在 while 和 do-while 循环中,要确保 continue 不会导致计数器无法更新,从而引发死循环。 |
掌握 continue 语句是编写高效、清晰 C 语言代码的重要一步。
