break/continue/goto
循环控制、跳出多重循环的 goto、使用场景与禁忌
break/continue/goto
循环不只能从头走到尾——break 提前退出、continue 跳过一次、goto 跨层跳出。
学完本章你将: 掌握 break/continue 区别、goto 的使用场景与禁忌。
break —— 退出整个循环
c
// 找到第一个能被 7 整除的数就退出
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
printf("找到了:%d\n", i); // 7
break;
}
}
continue —— 跳过本次、继续下次
c
// 只打印偶数
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 奇数跳过
}
printf("%d ", i); // 2 4 6 8 10
}
break vs continue
c
for (int i = 1; i <= 5; i++) {
if (i == 3) break;
printf("%d ", i);
} // 输出:1 2
for (int i = 1; i <= 5; i++) {
if (i == 3) continue;
printf("%d ", i);
} // 输出:1 2 4 5
goto —— 进阶跳出多重循环
大多数时候不需要 goto,但有它可以让跳出多层循环更优雅:
c
// 不用 goto 的写法(需要额外的标志位)
int found = 0;
for (int i = 0; i < 10 && !found; i++) {
for (int j = 0; j < 10; j++) {
if (data[i][j] == target) { found = 1; break; }
}
}
// 用 goto 的写法(更直接)
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (data[i][j] == target) goto found;
}
}
found:
printf("找到了\n");
⚠️ goto 的唯二正道: ① 跳出多层循环;② 统一的错误处理出口(Linux 内核大量使用)。绝不用 goto 实现循环或条件——那是 1960 年代的做法。