写代码时遇到要重复干一件事,比如打印1到100的数字、遍历一个用户列表、或者等用户输入正确密码才继续——这时候就得靠ref="/tag/147/" style="color:#3D6345;font-weight:bold;">循环。但 for、while、do-while 看着差不多,到底该挑哪个?不是看谁名字洋气,而是看它合不合你的场景。
先搞清它们的脾气
for 循环适合“心里有数”的情况:你知道大概要跑多少次,或者能提前算出边界。比如初始化一个数组、按固定步长处理数据、倒计时3秒……它的结构把初始化、条件判断、更新动作都挤在一行里,一目了然。
for (int i = 0; i < 5; i++) {
printf("第%d次执行\n", i + 1);
}while 循环偏爱“边走边看”。你不确定要跑几轮,只认一个条件:只要条件还成立,就继续跑。比如读取文件直到末尾、监控网络连接是否恢复、或者让用户反复输入直到格式正确。
char input[10];
printf("请输入'quit'退出:\n");
while (strcmp(input, "quit") != 0) {
scanf("%s", input);
}do-while 循环是个“先干再说”的主儿——它至少会执行一次,再检查条件。特别适合那种“得先试一下,再决定要不要再来”的场景,比如菜单系统:先显示选项,用户选完再判断要不要重进菜单。
int choice;
do {
printf("1. 查看信息\n2. 修改设置\n3. 退出\n请选择:");
scanf("%d", &choice);
} while (choice != 3);对照日常场景,秒懂怎么挑
• 统计班级30个学生的平均分?→ for:人数固定,下标从0到29,清清楚楚。
• 等待打印机连上网络,每隔2秒查一次状态?→ while:连没连上你不知道,只能一直问,直到返回“已就绪”。
• ATM机取款后问“是否继续交易”?→ do-while:先完成一次取款,再弹出“继续吗?”提示,不取钱就问这个就没意义。
一个小提醒
别为了“看起来高级”硬套 for。有人把 while 能搞定的事硬改成 for,比如:
for (; !isConnected(); ) {
checkNetwork();
sleep(1000);
}这反而让逻辑变绕。代码是写给人看的,顺手比炫技重要。