写程序时,总有些事得反复干——比如遍历一个商品列表、计算100个学生成绩的平均分、或者等用户输入正确密码才放行。这时候,靠复制粘贴代码不现实,得靠ref="/tag/147/" style="color:#643D3D;font-weight:bold;">循环控制来搞定。
最常用的三种循环结构
for 循环适合「知道执行次数」的场景。比如打印1到10:
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
初始化(i=1)、判断条件(i<=10)、更新操作(i++)全挤在一行里,清晰又紧凑。Python里更简单:for i in range(1, 11): print(i)。
while 循环偏爱「条件满足就一直跑」的逻辑。比如猜数字游戏,直到用户输对才停:
int guess = 0;
while (guess != 42) {
printf("猜一个数:");
scanf("%d", &guess);
}
它先检查条件,再决定要不要进循环体——万一一开始条件就不成立,一次都不执行。
do-while 循环则是「至少跑一次」的硬核选手。常用于菜单系统,比如命令行工具弹出选项后,等你选完再判断是否退出:
int choice;
do {
printf("1. 查看记录\n2. 导出数据\n0. 退出\n");
scanf("%d", &choice);
} while (choice != 0);
跳出和跳过:break 和 continue
break是紧急刹车键。在多重循环或搜索场景中特别管用——比如在一个二维数组里找某个值,找到立刻 break,不用把剩下的全扫一遍。
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (grid[i][j] == target) {
printf("找到啦,在第%d行第%d列\n", i+1, j+1);
break; // 这里只跳出内层循环
}
}
}
如果想直接跳出所有循环,有些语言支持带标签的 break(如 Java),但更通用的做法是改用函数封装 + return。
continue则是跳过本轮、直奔下一次。比如处理一批订单,只想统计「已发货」的订单金额:
double total = 0;
for (Order order : orders) {
if (!order.isShipped()) {
continue; // 不是已发货?跳过,不加钱
}
total += order.getAmount();
}
别忘了循环控制的“隐形选手”
除了语法层面的循环语句,还有些实用技巧常被忽略:
- 递归——函数自己调自己,适合树形结构遍历、阶乘、快速排序等。虽不是传统“循环”,但效果等价;
- goto(慎用)——C语言里能跳转,但容易让逻辑绕晕,日常开发基本被替代;
- 迭代器(如 Python 的 for item in list)——底层仍是循环,但屏蔽了索引细节,写起来更自然。
说到底,选哪种循环,关键看你要解决的问题:次数固定?用 for;条件驱动?选 while 或 do-while;中途要干预流程?break 和 continue 就是你的快进键。