if 和 continue 的区别
要明确一个非常重要的概念:

(图片来源网络,侵删)
if语句:是一个条件判断语句,它根据一个条件的真假(真为1,假为0)来决定是否执行其内部的代码块,它本身不会导致程序“跳转”或“循环”。continue语句:是一个跳转语句,它只能在循环(for,while,do-while)内部使用,它的作用是立即终止**当前**这一次的循环迭代,并直接跳转到下一次循环迭代的开始处。
if 和 continue 本身是两种不同类型的语句,你问的“if循环continue”,通常指的是在 if 语句的代码块里使用 continue,而这个 if 语句又位于一个循环的内部。
continue 在循环中的工作原理
continue 的行为取决于它所在的循环类型:
在 for 循环中
当 continue 在 for 循环中执行时,程序会:
- 立即跳过
for循环体中continue之后的所有剩余代码。 - 直接执行
for循环的增量表达式(i++)。 - 然后执行
条件判断(i < 10)。 - 如果条件为真,则开始下一次循环;如果为假,则循环结束。
// 示例:打印 1 到 10,但跳过 5
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
printf("跳过数字 5\n");
continue; // 跳过本次循环的剩余部分,直接执行 i++
}
printf("i = %d\n", i);
}
return 0;
}
输出:
i = 1
i = 2
i = 3
i = 4
跳过数字 5
i = 6
i = 7
i = 8
i = 9
i = 10
在 while 和 do-while 循环中
当 continue 在 while 或 do-while 循环中执行时,程序会:
- 立即跳过循环体中
continue之后的所有剩余代码。 - 直接跳转到循环的条件判断部分,进行下一次循环的判断。
特别注意:在 while 和 do-while 循环中,continue 不会自动更新循环变量,如果你在 continue 之前没有更新循环变量,可能会导致无限循环。
// 示例:while 循环中使用 continue
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
if (i == 2) {
printf("跳过 i = 2,注意 i 没有被更新!\n");
i++; // 必须手动更新,否则会无限循环
continue;
}
printf("i = %d\n", i);
i++;
}
return 0;
}
输出:
i = 0
i = 1
跳过 i = 2,注意 i 没有被更新!
i = 3
i = 4
如果去掉 if (i == 2) 代码块里的 i++,程序在 i 等于 2 时会一直 continue,永远无法进入下一次循环判断,导致死循环。
if + continue 的常见用法
将 if 和 continue 结合起来是循环中最常见的模式之一,主要用于过滤或跳过某些不符合条件的元素。
示例1:处理数组,跳过负数
假设我们有一个整数数组,我们想计算所有正数的和。
#include <stdio.h>
int main() {
int numbers[] = {10, -5, 20, -8, 15, 0};
int sum = 0;
int size = sizeof(numbers) / sizeof(numbers[0]);
for (int i = 0; i < size; i++) {
// 如果数字小于等于0,就跳过本次循环
if (numbers[i] <= 0) {
continue;
}
// 只有当数字大于0时,这里的代码才会被执行
sum += numbers[i];
printf("累加了 %d, 当前和为: %d\n", numbers[i], sum);
}
printf("\n最终所有正数的和为: %d\n", sum);
return 0;
}
输出:
累加了 10, 当前和为: 10
累加了 20, 当前和为: 30
累加了 15, 当前和为: 45
最终所有正数的和为: 45
在这个例子中,if (numbers[i] <= 0) 判断了元素是否需要被过滤掉,如果是,continue 就会跳过 sum += numbers[i] 这行累加代码,直接进入下一次循环。
示例2:检查奇偶性
打印 1 到 10 之间的所有偶数。
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
// i 是奇数,就跳过
if (i % 2 != 0) {
continue;
}
// 只有偶数才会被打印
printf("%d 是偶数\n", i);
}
return 0;
}
输出:
2 是偶数
4 是偶数
6 是偶数
8 是偶数
10 是偶数
continue 与 break 的关键区别
初学者经常混淆 continue 和 break,它们都是循环内的跳转语句,但作用完全不同:
| 特性 | continue |
break |
|---|---|---|
| 作用 | 跳过本次循环,继续下一次循环。 | 完全终止整个当前循环。 |
| 位置 | 只能在循环内部。 | 可以在循环或 switch 语句内部。 |
| 比喻 | “这个不符合要求,我不处理它了,看看下一个。” | “这个循环我已经处理完了,不玩了,直接退出。” |
break 示例:
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break; // 当 i 等于 3 时,整个 for 循环直接结束
}
printf("i = %d\n", i);
}
// 输出:
// i = 1
// i = 2
// 循环在 i=3 时被 break 终止,i=4 和 i=5 不会被执行
if是判断:if (条件)决定一段代码是否执行。continue是跳转:只能在循环内使用,作用是跳过当前循环的剩余部分,直接进入下一次循环。if+continue是过滤:这是最常见的组合。if用来判断是否需要“过滤”当前元素,如果需要,就执行continue来跳过处理该元素的代码。- 注意
continue在while循环中的陷阱:记得手动更新循环变量,否则可能导致无限循环。 continuevsbreak:continue是“跳过一次”,break是“彻底退出”。
