4.4 KiB
4.4 KiB
第 9 课:菜单与循环(while + break)
本课目标:让程序像小游戏一样 反复显示菜单,玩家输入数字选择:抽一次卡 / 看说明 / 退出。学会 while (true) 以及 break 跳出循环。
复习:第 8 课的 draw_once();第 3 课的 cin。本课把「输入选项」包在一个 一直转的大圈 里。
1. 这一课要搞懂什么
while (条件):条件成立就反复执行{ ... }里的代码。while (true):true永远成立 → 无限循环,除非里面用break强行离开。break:用在循环里,表示 立刻结束这一层循环,继续执行循环后面的代码(通常是return 0结束程序)。- 菜单:每一圈先
cout打印选项,再cin >> choice,再用if/else if/else判断选了哪一项。
2. 推荐选项编号(示例)
| 输入数字 | 动作 |
|---|---|
1 |
调用 draw_once() 抽一次 |
2 |
打印几句游戏规则说明 |
0 |
break 退出循环(说再见) |
你也可以改成 3 退出,只要在文档里写清楚即可。
3. 完整示例程序
保存为 lession9.cpp:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
void draw_once() {
int r = std::rand() % 100;
if (r < 70) {
std::cout << "普通卡\n";
} else if (r < 95) {
std::cout << "稀有卡\n";
} else {
std::cout << "超稀有卡\n";
}
}
int main() {
std::srand(std::time(nullptr));
while (true) {
std::cout << "\n===== 抽卡小游戏 =====\n";
std::cout << "1 抽一次\n";
std::cout << "2 说明\n";
std::cout << "0 退出\n";
std::cout << "请选择:";
int choice = 0;
std::cin >> choice;
if (choice == 1) {
draw_once();
} else if (choice == 2) {
std::cout << "随机出普通/稀有/超稀有,选 1 抽一次,选 0 退出。\n";
} else if (choice == 0) {
std::cout << "再见!\n";
break;
} else {
std::cout << "没有这个选项,请重新输入。\n";
}
}
return 0;
}
程序是怎么跑的?
- 进入
while (true),显示菜单。 - 等你输入
choice。 - 若选
0:打印再见 →break→ 循环结束 → 执行return 0。 - 否则再回到步骤 1(又是新的一圈菜单)。
4. 两个循环的区别(回忆)
| 循环 | 适合干什么 |
|---|---|
for |
次数明确,例如「抽 n 次」 |
while |
次数不固定,例如「一直显示菜单直到选退出」 |
菜单用 while 很自然;菜单里选「抽十次」可以再写一个 for 调用 draw_once()。
5. 怎么编译和运行
clang++ -std=c++17 -o lession9 lession9.cpp
./lession9
6. 本课课堂小练习
- 增加菜单项
3:先问「抽几次?」,读入n,用for调用draw_once()n次(把第 6、8 课合在一起)。 - 把菜单文字改成你喜欢的标题和选项说明。
7. 本课课后作业(选做)
- 加一个
int coins:每抽一次扣 10 金币,金币不够时提示并禁止抽卡(需要if (coins >= 10)再抽)。 - 问家长:为什么退出要用
break,而不是直接写return 0在分支里?(两种有时都能用;本课先理解break只跳出while。)
8. 常见小问题
- 退出不了:检查退出分支里有没有
break;条件是不是写成了赋值=而不是比较==。 - 菜单刷屏:每一圈开头加一点点分隔线(示例里用了
\n和=====)会好看一些。 cin输入错了类型:输入字母可能导致菜单卡住,选做以后再学清理输入流;本课先用数字测试。
9. 下一课预告
第 10 课是 综合小项目:把欢迎语、菜单、金币或次数、统计超稀有等整理成你自己的「迷你抽卡游戏」版本。
学完请家长在 学习进度与状态.md 里更新第 9 课的状态与作业完成情况。
下一课文档:第10课-综合小项目.md(创建后将放在工作区;也可先对照 教程-抽卡游戏-C++-10课.md 第 10 节)。