什么是 continue 语句?
continue 是 C 语言中的一个控制流语句,它的作用是立即终止当前正在执行的循环体的剩余部分,并直接跳转到循环的条件判断部分,然后决定是否开始下一次循环。

continue 就像是你在循环的某个步骤中突然说:“这一步我不做了,直接开始下一次吧!”
重要提示:
continue 只能用在 for、while 和 do-while 这三种循环结构中,在 switch 语句中也可以使用 continue,但其行为与在循环中略有不同,我们这里主要讨论它在循环中的用法。
continue 语句的工作流程
为了更好地理解,我们通过一个简单的 for 循环来分解 continue 的工作流程:
for (初始化表达式; 条件判断; 更新表达式) {
// 循环体开始
// ... 一些代码 ...
if (某个条件) {
continue; // <--- 关键点
}
// ... continue 没有被执行,这里会继续执行 ...
// ... 循环体结束 ...
}
当 continue 语句被执行时,会发生以下事情:

- 跳过:
continue语句之后的所有代码(在同一个循环体内)都会被立即跳过,不再执行。 - 跳转:程序控制权直接传递给循环的“更新表达式”(在
for循环中)或“条件判断”(在while和do-while循环中)。 - 继续:循环继续执行,开始下一次迭代。
continue 在不同循环中的具体表现
a) 在 for 循环中
在 for 循环中,执行 continue 后,会先执行更新表达式,然后再进行条件判断。
// 示例:打印 1 到 10 之间除了 5 以外的所有数字
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // 当 i 等于 5 时,跳过本次循环的剩余部分
}
printf("%d ", i); // 这行代码在 i=5 时不会被执行
}
// 输出结果: 1 2 3 4 6 7 8 9 10
执行流程:
i从 1 到 4,if条件为假,正常打印。i变为 5,if条件为真,执行continue。- 跳过
printf,直接跳转到for循环的i++。 i变为 6,判断i <= 10为真,继续循环。- ... 以此类推。
b) 在 while 循环中
在 while 循环中,执行 continue 后,会直接跳转到条件判断部分。注意:它会跳过更新表达式的部分,这可能会导致死循环,如果更新是在循环体内的话。
// 示例:打印 1 到 10 之间除了 5 以外的所有数字
int i = 1;
while (i <= 10) {
if (i == 5) {
continue; // 当 i 等于 5 时,跳到 while 的条件判断
}
printf("%d ", i);
i++; // 更新 i
}
// 输出结果: 1 2 3 4,然后程序卡死(死循环)
为什么会死循环?

i从 1 到 4,正常打印并i++。i变为 5,if条件为真,执行continue。- 跳过
printf和i++,直接跳转到while (i <= 10)。 i仍然是 5,条件5 <= 10为真。- 再次进入循环,
if (i == 5)再次为真,再次执行continue。 - ... 无限循环下去。
修正版本:
为了避免这种情况,通常会将 continue 放在更新操作之后,或者使用 do-while 循环。
// 修正后的 while 循环
int i = 1;
while (i <= 10) {
if (i == 5) {
i++; // 必须在这里更新 i,否则会死循环
continue;
}
printf("%d ", i);
i++;
}
// 输出结果: 1 2 3 4 6 7 8 9 10
c) 在 do-while 循环中
do-while 循环和 while 循环类似,执行 continue 后也会直接跳转到条件判断部分,同样需要注意死循环的风险。
// 示例:打印 1 到 10 之间除了 5 以外的所有数字
int i = 1;
do {
if (i == 5) {
i++; // 必须在这里更新 i
continue;
}
printf("%d ", i);
i++;
} while (i <= 10);
// 输出结果: 1 2 3 4 6 7 8 9 10
continue 与 break 的关键区别
初学者经常混淆 continue 和 break,它们的作用完全不同:
| 特性 | continue |
break |
|---|---|---|
| 作用 | 跳过本次循环的剩余部分,继续下一次循环。 | 完全跳出整个循环,循环终止。 |
| 影响范围 | 只影响当前所在的一层循环。 | 只影响当前所在的一层循环。 |
| 类比 | “这一步不做了,下一轮继续。” | “整个游戏不玩了,我走了。” |
代码示例对比:
// 使用 continue
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
printf("continue: i = %d\n", i);
}
// 输出:
// continue: i = 0
// continue: i = 1
// continue: i = 3
// continue: i = 4
// 使用 break
for (int i = 0; i < 5; i++) {
if (i == 2) {
break;
}
printf("break: i = %d\n", i);
}
// 输出:
// break: i = 0
// break: i = 1
// 循环在 i=2 时被终止,后面的代码不再执行
continue 的实际应用场景
continue 通常用于以下情况:
-
过滤数据:这是最常见的用途,当你需要处理一个数据集合,但想跳过其中不符合某些条件的元素时。
// 打印所有偶数 for (int i = 0; i < 20; i++) { if (i % 2 != 0) { // 如果不是偶数 continue; // 就跳过 } printf("%d ", i); } -
避免深层嵌套:一个条件成立时,我们不想执行循环体内的很多代码,使用
continue可以避免写多层if-else嵌套,使代码更清晰。// 不好的写法(深层嵌套) for (int i = 0; i < 10; i++) { if (data[i].is_valid) { if (data[i].value > 100) { if (data[i].category == 'A') { // 执行一些复杂的操作... } } } } // 使用 continue 的好写法 for (int i = 0; i < 10; i++) { if (!data[i].is_valid) continue; if (data[i].value <= 100) continue; if (data[i].category != 'A') continue; // 执行一些复杂的操作... // 只有当所有条件都满足时,代码才会执行到这里 } -
处理错误或特殊情况:在循环中遇到某个错误或特殊情况时,可以跳过当前迭代,继续处理下一个。
// 伪代码:处理文件列表 for (each file in file_list) { if (file is empty) { log_warning("File is empty, skipping."); continue; } process_file(file); }
continue的作用:跳过本次循环剩余代码,直接进入下一次循环。- 适用范围:
for、while、do-while循环。 - 与
break的区别:break是跳出整个循环,continue是跳过本次。 - 在
while循环中的风险:可能导致死循环,因为continue会跳过循环体内的更新语句。 - 主要用途:过滤数据、简化条件判断(避免深层嵌套)、处理特殊情况。
合理使用 continue 可以让你的代码逻辑更清晰,更易于阅读和维护。
