一句话总结
continue 语句的作用是立即终止当前这次循环的剩余部分,并直接跳转到下一次循环的开始处执行。

跳过本次循环剩下的代码,直接进入下一次循环”。
工作原理详解
continue 只能用在循环语句(for, while, do-while)中,它不是一个 break,break 会直接跳出整个循环,而 continue 只是“忽略”掉循环体中 continue 语句之后的所有代码。
在 for 循环中
在 for 循环中,当执行到 continue 时,程序会:
- 立即跳过
continue之后的所有语句。 - 直接执行
for循环的迭代语句(通常是i++或 )。 - 然后执行
条件判断。 - 如果条件为真,则开始下一次循环;如果为假,则循环结束。
示例代码:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
// i 是 3 的倍数,就跳过本次循环的剩余部分
if (i % 3 == 0) {
printf("跳过数字 %d\n", i);
continue; // 跳转到 for 循环的 i++ 部分
}
// 这部分代码在 i 是 3 的倍数时不会被执行
printf("当前数字是: %d\n", i);
}
return 0;
}
执行结果:
当前数字是: 1
当前数字是: 2
跳过数字 3
当前数字是: 4
当前数字是: 5
跳过数字 6
当前数字是: 7
当前数字是: 8
跳过数字 9
当前数字是: 10
分析:
当 i 的值为 3, 6, 9 时,if 条件成立,continue 被执行,程序立即跳过了 printf("当前数字是: %d\n", i); 这一行,直接执行 i++,然后进行下一次循环判断。
在 while 循环中
在 while 循环中,当执行到 continue 时,程序会:
- 立即跳过
continue之后的所有语句。 - 直接跳转到
while的条件判断部分。 - 如果条件为真,则开始下一次循环;如果为假,则循环结束。
示例代码:
#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
⚠️ 重要提示: 在 while 或 do-while 循环中使用 continue 时要格外小心。continue 跳过了一个用于更新循环变量的语句(如 i++),并且这个变量没有被其他地方更新,那么循环条件将永远不变,导致无限循环。
如果上面的代码把 i++ 放在 if 语句后面,就会发生死循环:
// 错误示例,会导致死循环
while (i < 5) {
if (i == 3) {
printf("跳过数字 %d\n", i);
continue; // 直接跳转到 while(i < 5),i 永远是 3
}
i++; // 这行代码在 i==3 时永远不会执行
printf("当前数字是: %d\n", i);
}
continue 与 break 的核心区别
这是初学者最容易混淆的地方,用一个表格来清晰地对比它们:
| 特性 | continue |
break |
|---|---|---|
| 作用范围 | 只在循环(for, while, do-while)中使用。 |
可在循环和switch语句中使用。 |
| 行为 | 跳过本次循环的剩余部分,进入下一次循环。 | 跳出整个循环或 switch 语句,执行循环/switch后面的代码。 |
| 循环控制 | 不终止循环,只是提前结束当前迭代。 | 终止整个循环。 |
| 比喻 | “这个任务我不做了,休息一下,准备下一个任务。” | “这个项目我不干了,直接回家。” |
示例对比:
#include <stdio.h>
int main() {
printf("--- 使用 continue ---\n");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
printf("continue: %d\n", i);
}
printf("\n--- 使用 break ---\n");
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
printf("break: %d\n", i);
}
return 0;
}
执行结果:
--- 使用 continue ---
continue: 1
continue: 2
continue: 4
continue: 5
--- 使用 break ---
break: 1
break: 2
从结果可以看出,continue 跳过了 i=3 的打印,但循环继续到 i=5,而 break 在 i=3 时直接终止了整个 for 循环。
continue 的实际应用场景
continue 通常用于以下情况:
-
过滤数据:在遍历一个数据集合(如数组)时,跳过不符合特定条件的元素。
// 计算所有正整数的和,跳过负数 int sum = 0; for (int i = 0; i < 10; i++) { if (numbers[i] < 0) { continue; // 跳过负数 } sum += numbers[i]; } -
错误处理:在循环中遇到某些错误或特殊情况时,跳过当前的处理逻辑。
// 读取文件,跳过空行 char line[256]; while (fgets(line, sizeof(line), file)) { if (line[0] == '\n') { continue; // 跳过空行 } // 处理非空行... } -
简化嵌套:有时候使用
continue可以减少代码的嵌套层级,使代码更清晰。// 不使用 continue 的嵌套 for (int i = 0; i < n; i++) { if (is_valid(i)) { // 很多代码... // 更多代码... } } // 使用 continue 减少嵌套 for (int i = 0; i < n; i++) { if (!is_valid(i)) { continue; } // 很多代码... // 更多代码... }后一种写法对于
is_valid为真的情况,逻辑更直接,缩进更少。
continue的作用:在循环中,跳过本次循环剩余的代码,直接进入下一次循环。- 使用位置:仅限于
for,while,do-while循环体内。 - 与
break的区别:continue是“跳过本次”,break是“跳出整个循环”。 - 注意事项:在
while和do-while循环中,要确保continue不会导致循环变量无法更新,从而引发死循环。
合理使用 continue 可以让代码逻辑更清晰,减少不必要的嵌套,是 C 语言中一个非常有用的控制流语句。
