# 第 3 课:听玩家的话(键盘输入) **本课目标**:学会用 **`std::cin`** 从键盘读入数字,存进已经学过的 **`int` 变量** 里。这样游戏可以问「你想抽几次?」「你有多少金币?」而不是写死在代码里。 **复习**:第 1 课 `cout` 输出;第 2 课 `int` 变量。本课把 **玩家输入** 和 **变量** 连起来。 --- ## 1. 这一课要搞懂什么 - **`std::cout <<`**:程序 **往外说**(屏幕上看得到)。 - **`std::cin >>`**:程序 **往里收**(你在键盘上打字,程序读进来)。 - `>>` 像一个小漏斗:右边的变量名表示「读到的数放进哪个盒子」。 顺序很重要:一般先 **`cout` 写一句提示**,再 **`cin` 读入**,玩家才知道该输入什么。 --- ## 2. 第一个会「听人话」的程序 保存为 `lesson3.cpp`(或你喜欢的名字,扩展名 `.cpp`): ```cpp #include int main() { int pulls = 0; std::cout << "你想抽几次?"; std::cin >> pulls; std::cout << "好,我们准备抽 " << pulls << " 次\n"; return 0; } ``` ### 每一部分在说什么 | 代码 | 意思(小朋友版) | |------|------------------| | `int pulls = 0;` | 先准备一个整数盒子,里面暂时当 0(读入后会被覆盖)。 | | `std::cout << "你想抽几次?";` | 屏幕上显示问题,**不换行**也可以,光标停在同一行等输入。 | | `std::cin >> pulls;` | 等你按回车,把输入的 **整数** 放进 `pulls`。 | | 下一行 `cout` | 把盒子里的数说出来,确认程序真的记住了。 | 编译运行后,输入一个整数(例如 `5`),回车,应看到:`好,我们准备抽 5 次` --- ## 3. 提示语要清楚 玩家不知道要输入什么时会发呆,所以: - 问题用 **`cout`** 写清楚。 - 可以在提示里写「请输入整数」或「输入数字后按回车」。 ```cpp std::cout << "请输入你想抽的次数(整数),然后按回车:"; std::cin >> pulls; ``` --- ## 4. 一次读两个数(进阶) 抽卡可以既要「次数」又要「金币」,可以连着写两次 `cin`: ```cpp #include int main() { int pulls = 0; int coins = 0; std::cout << "抽几次?"; std::cin >> pulls; std::cout << "现在有多少金币?"; std::cin >> coins; std::cout << "收到:抽 " << pulls << " 次,金币 " << coins << "\n"; return 0; } ``` 运行时要 **输入两次**:第一次回车后,再问第二个数。 --- ## 5. 和抽卡游戏的关系 | 想法 | 做法 | |------|------| | 玩家决定抽几次 | `cin >> pulls` | | 玩家报金币数量 | `cin >> coins` | | 以后扣金币、减次数 | 用第 2 课的变量和赋值、`pulls - 1` 等 | 本课只保证:**能读进来、能显示出来**。随机抽结果在第 4 课。 --- ## 6. 怎么编译和运行 ```bash clang++ -std=c++17 -o lesson3 lesson3.cpp ./lesson3 ``` 输入数字后一定要按 **回车**,程序才会继续。 --- ## 7. 本课课堂小练习 1. 只用一个程序:先 `cout` 问「你叫什么名字?」——名字是 **文字**,本课先不学 `string`,可以改成问「你的幸运数字是几?」用 `int lucky` + `cin` 读入并打印。 2. 做「抽几次 + 金币」两段提问(用上文第 4 节的结构),最后输出一句自己编的话,里面必须用到 `pulls` 和 `coins`。 --- ## 8. 本课课后作业(选做) - 故意在问「整数」时输入 **字母** 或 **符号**,看程序会怎样(可能卡住或出错,先观察,以后会学更稳妥的写法)。 - 问家长:`cin >> pulls` 后面的 `>>` 和 `cout` 里的 `<<` 方向为什么相反?(一个往里收,一个往外送,像箭头方向。) --- ## 9. 常见小问题 - **输入完没反应**:检查是否按了回车;是否在等待第二个数(读两次就要输入两次)。 - **想输入中文名字**:要用 `std::string`,下几课会用到时再扩展;本课整数输入用数字即可。 - **一次想输入多个数**:可以在一行里用空格隔开两个整数,例如 `3 50`,然后 `std::cin >> pulls >> coins;`(试一试当拓展)。 --- ## 10. 下一课预告 第 4 课会学 **随机数**:每次抽卡结果不一样——`rand`、`srand` 和「种子」,为真正的 **抽卡运气** 做准备。 --- *学完请家长在 `学习进度与状态.md` 里更新第 3 课的状态与作业完成情况。* **下一课文档**:`第04课-运气来了.md`