先让菜单出现,
再由输入决定下一轮
今天学习 do ... while,把输入、switch 与循环组合成可以重复运行的菜单,并通过多组输入验证继续、无效选项与退出路线。
while 先检查,do ... while 先执行
两个循环都让变量从 10 开始,并使用不大于 5 的条件。while 第一次检查就失败,所以循环体执行 0 次;do ... while 会先执行一次,再检查条件。
int while_number = 10;
while (while_number <= 5)
{
printf("while_number = %d\n", while_number);
while_number++;
}
int do_number = 10;
do
{
printf("do_number = %d\n", do_number);
do_number++;
} while (do_number <= 5);实际没有输出 while_number = 10,但输出了一次 do_number = 10。即使初始值换成 18 或其他不满足条件的数,do 循环体仍会先执行一次。
末尾条件之后必须写分号
do ... while 的条件位于循环体之后,完整结尾是 } while (条件);。这里的分号属于这条循环语句,不能遗漏。
让用户输入控制菜单是否重复
菜单先显示选项,再用 scanf_s() 把输入保存到 choice。switch 负责选择功能,末尾的 while (choice != 0) 决定是否重新显示菜单。
int choice = 0;
do
{
printf("1. 打招呼\n");
printf("2. 显示学习状态\n");
printf("3. 显示明日安排\n");
printf("0. 退出\n");
scanf_s("%d", &choice);
switch (choice)
{
case 1:
printf("你好,欢迎继续学习 C 语言!\n");
break;
case 2:
printf("正在学习 do while 循环\n");
break;
case 3:
printf("明天进行第二次 C 语言阶段检测\n");
break;
case 0:
printf("正在退出菜单\n");
break;
default:
printf("无效选项\n");
break;
}
} while (choice != 0);分清 switch 与循环的两层控制
每个 case 中的 break 只结束当前 switch,不会直接结束外面的 do ... while。例如输入 1 后,打招呼分支结束,但 1 != 0 成立,所以菜单继续。
输入 0 时,程序先进入 case 0 输出退出提示;离开 switch 后,0 != 0 不成立,循环才真正结束。
独立扩展选项并修正 case 穿透
菜单原本只有选项 1、2 和 0,后来独立增加选项 3“显示明日安排”。第一次在 case 3 后漏写 break,会继续执行 case 0 的退出提示;补上 break 后,输入 3 只显示阶段检测安排,菜单仍会继续。
实际完成三组测试:输入 1、2、0 验证正常功能与退出;输入 8、0 验证 default 后菜单继续;输入 3、0 验证新增分支不再穿透。所有测试均正常退出,代码为 0。
今天真正掌握的内容
- 会比较
while与do ... while的条件检查顺序 - 理解
do ... while至少执行一次 - 记住末尾
while (条件);的分号 - 会用用户输入控制菜单是否重复
- 能区分
switch的break与外层循环条件 - 会测试正常选项、无效选项、退出选项与 case 穿透
下一步是 C 语言第 16 天第二次阶段复习与检测,范围为 C Day 9—15,不引入新语法。