continue在c语言中怎么用(通俗易懂,附实例)
在 C 语言里,continue 是一条“循环控制语句”,它不会终止整个循环,而是立即结束本轮迭代的剩余语句,直接回到循环头部进行下一次条件判断。
形象地说,continue 像“快进键”:本轮还没跑完的代码一律忽略,马上进入下一轮。
与 break 相比,continue 的“杀伤力”更小;break 直接跳出循环,continue 只是“偷懒”本轮。初学者常把两者混淆,记住一个口诀:“break 跳循环,continue 跳本轮”。
continue只能出现在循环体里
语法上,continue 必须位于 for、while 或 do…while 的循环体内,否则编译器报错:
#include <stdio.h> int main(void) { int a = 3; if (a > 2) continue; /* ❌ 编译错误:continue 出现在循环外 */ return 0; }
编译提示:error: continue statement not within a loop。
continue 在三类循环中的差异
1. while 与 do…while
碰到 continue 后,程序立即跳到循环条件表达式重新求值。
2. for 循环
continue 会先执行表达式3(增量部分),再判断表达式2(循环条件)。
差异代码对比:
/* while 版 */ int i = 0; while (i < 5) { i++; if (i == 3) continue; printf("%d ", i); /* 输出 1 2 4 5 */ } /* for 版 */ for (int i = 0; i < 5; ++i) { if (i == 3) continue; printf("%d ", i); /* 输出 0 1 2 4 */ }
continue与if的组合套路
最常见场景:跳过无效数据。
/* 只处理正数,负数直接忽略 */ #include <stdio.h> int main(void) { int data[8] = {4, -2, 7, 0, 5, -9, 1, 8}; int sum = 0; for (int i = 0; i < 8; ++i) { if (data[i] <= 0) /* 非正数跳过 */ continue; sum += data[i]; printf("add %d -> sum=%d\n", data[i], sum); } printf("total: %d\n", sum); return 0; }
运行结果:
add 4 -> sum=4 add 7 -> sum=11 add 5 -> sum=16 add 1 -> sum=17 add 8 -> sum=25 total: 25
continue 与多层循环:它只影响自己所在的那一层
continue 永远只能跳过直接包裹它的那一层循环。想跨层控制,需要借助其他手段(如标志变量或 goto)。
/* 打印 2×3 矩阵,跳过列号等于行号的元素 */ #include <stdio.h> int main(void) { for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { if (i == j) continue; /* 只跳过内层本轮 */ printf("(%d,%d) ", i, j); } putchar('\n'); } return 0; }
运行结果:
(0,1) (0,2) (1,0) (1,2)
continue 的典型应用场景
- 过滤非法输入:读字符时跳过空白符。
- 加速查找:找到目标后跳过剩余处理。
- 统计有效成绩:跳过负数或大于 100 的异常分值。
/* 例:跳过空白再统计单词 */ #include <stdio.h> #include <ctype.h> int main(void) { char txt[] = " hello world\n"; int words = 0, inword = 0; for (int i = 0; txt[i] != '\0'; ++i) { if (isspace((unsigned char)txt[i])) { inword = 0; continue; /* 空白直接下一轮 */ } if (!inword) { /* 新单词起点 */ ++words; inword = 1; } } printf("words = %d\n", words); /* 输出 2 */ return 0; }
容易踩的坑
1. continue 后面忘记更新变量 → 死循环
int i = 0; while (i < 5) { if (i == 2) continue; /* i 永远等于 2,死循环 */ ++i; }
2. 在 switch 里写 continue
switch 本身不是循环,continue 只能写在 switch 内部的循环体里,否则编译失败。
总结
“continue 跳本轮,break 才跳全身”,记住这句话,continue 就再也不会成为你代码里的“幽灵语句”。

浙公网安备 33010602011771号