continue 是 C 语言中的一个控制流语句,它的作用是立即终止当前正在执行的本次循环迭代,并直接跳转到循环的条件判断部分,准备开始下一次迭代。
核心要点
- 作用范围:
continue只能在for、while和do-while循环内部使用。 - 核心行为:
- 跳过:跳过
continue语句之后,循环体中剩余的所有代码。 - 继续:立即开始下一次循环迭代。
- 跳过:跳过
- 与
break的区别:这是初学者最容易混淆的地方。continue:跳出**本次迭代,继续**下一次迭代。break:跳出整个循环,循环彻底结束。
语法
continue 语句的语法非常简单,它本身就是一个关键字:
continue;
它通常与一个 if 条件语句结合使用,以决定是否要跳过本次迭代。
工作原理详解
为了更好地理解,我们来看一下 continue 在不同类型循环中的具体工作流程。
在 for 循环中
当 continue 在 for 循环中执行时:
- 程序立即跳转到循环的更新表达式(
for循环第三部分,如i++)。 - 执行更新表达式。
- 然后执行条件判断(
for循环第二部分,如i < 10)。 - 如果条件为真,则开始下一次迭代;如果为假,则循环结束。
示例代码:
#include <stdio.h>
int main() {
printf("--- for 循环中的 continue 示例 ---\n");
for (int i = 0; i < 10; i++) {
// i 是 3 的倍数,则跳过本次迭代的剩余代码
if (i % 3 == 0) {
printf("i = %d 是 3 的倍数,跳过打印,\n", i);
continue; // 跳转到 i++,然后判断 i < 10
}
// 这行代码在 i 是 3 的倍数时不会被执行
printf("i = %d\n", i);
}
return 0;
}
输出结果:
--- for 循环中的 continue 示例 ---
i = 0 是 3 的倍数,跳过打印。
i = 1
i = 2
i = 3 是 3 的倍数,跳过打印。
i = 4
i = 5
i = 6 是 3 的倍数,跳过打印。
i = 7
i = 8
i = 9 是 3 的倍数,跳过打印。
在 while 循环中
当 continue 在 while 循环中执行时:
- 程序立即跳转到循环的条件判断部分。
- 执行条件判断。
- 如果条件为真,则开始下一次迭代;如果为假,则循环结束。
⚠️ 重要提示:continue 之后的代码包含了改变循环条件的操作(i++),continue 跳过了这个操作,那么循环可能会变成无限循环。
示例代码(正确使用):
#include <stdio.h>
int main() {
int i = 0;
printf("\n--- while 循环中的 continue 示例 ---\n");
while (i < 10) {
if (i % 3 == 0) {
printf("i = %d 是 3 的倍数,跳过打印并增加 i,\n", i);
i++; // 必须在这里增加 i,否则 i 永远不会改变
continue; // 跳转到 while (i < 10) 的判断
}
printf("i = %d\n", i);
i++; // 正常情况下的 i++
}
return 0;
}
输出结果:
--- while 循环中的 continue 示例 ---
i = 0 是 3 的倍数,跳过打印并增加 i。
i = 1
i = 2
i = 3 是 3 的倍数,跳过打印并增加 i。
i = 4
i = 5
i = 6 是 3 的倍数,跳过打印并增加 i。
i = 7
i = 8
i = 9 是 3 的倍数,跳过打印并增加 i。
在 do-while 循环中
do-while 循环的行为与 while 循环类似,当 continue 执行时,程序会跳转到循环末尾的 while 条件判断部分。
示例代码:
#include <stdio.h>
int main() {
int i = 0;
printf("\n--- do-while 循环中的 continue 示例 ---\n");
do {
if (i == 5) {
printf("i = %d,跳过本次迭代,\n", i);
i++; // 同样需要手动增加 i
continue;
}
printf("i = %d\n", i);
i++;
} while (i < 10);
return 0;
}
输出结果:
--- do-while 循环中的 continue 示例 ---
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5,跳过本次迭代。
i = 6
i = 7
i = 8
i = 9
常见应用场景
continue 最常见的用途是过滤或跳过某些不符合特定条件的迭代。
场景:计算一个数组中所有正数的平均值
#include <stdio.h>
int main() {
int numbers[] = {10, -5, 20, -8, 15, 0, 30};
int count = sizeof(numbers) / sizeof(numbers[0]);
int sum = 0;
int positive_count = 0;
printf("\n--- 计算 正数 平均值示例 ---\n");
for (int i = 0; i < count; i++) {
// 如果数字不是正数,就跳过本次迭代
if (numbers[i] <= 0) {
continue;
}
// 只有正数才会执行到这里
sum += numbers[i];
positive_count++;
printf("累加正数: %d (当前总和: %d)\n", numbers[i], sum);
}
if (positive_count > 0) {
double average = (double)sum / positive_count;
printf("\n所有正数的平均值是: %.2f\n", average);
} else {
printf("\n数组中没有正数,\n");
}
return 0;
}
输出结果:
--- 计算 正数 平均值示例 ---
累加正数: 10 (当前总和: 10)
累加正数: 20 (当前总和: 30)
累加正数: 15 (当前总和: 45)
累加正数: 30 (当前总和: 75)
所有正数的平均值是: 18.75
使用 continue 的注意事项
-
避免过度使用:虽然
continue可以让代码逻辑更清晰,但滥用它可能会导致代码流程难以追踪,通过if-else结构重构代码可能会更直观。-
对比示例:
// 使用 continue 的方式 for (int i = 0; i < n; i++) { if (condition) { // 处理 A continue; } // 处理 B } // 使用 if-else 的方式 for (int i = 0; i < n; i++) { if (condition) { // 处理 A } else { // 处理 B } }在这个简单例子中,两种方式可读性差不多,但在更复杂的逻辑中,
if-else的层级嵌套可能会很深,continue可以用来“扁平化”代码结构,减少嵌套。
-
-
注意
while和do-while循环中的陷阱:如前所述,在while和do-while循环中,continue跳过了更新循环变量的代码,极易导致无限循环。
| 特性 | 描述 |
|---|---|
continue |
|
| 作用 | 终止当前循环迭代,立即开始下一次迭代。 |
| 使用位置 | 只能在 for, while, do-while 循环内部。 |
与 break 的区别 |
break 跳出整个循环;continue 跳出本次迭代。 |
| 主要用途 | 用于在循环中跳过不符合特定条件的部分,常用于数据过滤。 |
| 注意事项 | 在 while 和 do-while 循环中要小心,避免因跳过更新变量而导致无限循环。 |
