Files
chouka/old/第03课-听玩家的话.md
2026-05-16 11:09:02 +08:00

139 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 3 课:听玩家的话(键盘输入)
**本课目标**:学会用 **`std::cin`** 从键盘读入数字,存进已经学过的 **`int` 变量** 里。这样游戏可以问「你想抽几次?」「你有多少金币?」而不是写死在代码里。
**复习**:第 1 课 `cout` 输出;第 2 课 `int` 变量。本课把 **玩家输入****变量** 连起来。
---
## 1. 这一课要搞懂什么
- **`std::cout <<`**:程序 **往外说**(屏幕上看得到)。
- **`std::cin >>`**:程序 **往里收**(你在键盘上打字,程序读进来)。
- `>>` 像一个小漏斗:右边的变量名表示「读到的数放进哪个盒子」。
顺序很重要:一般先 **`cout` 写一句提示**,再 **`cin` 读入**,玩家才知道该输入什么。
---
## 2. 第一个会「听人话」的程序
保存为 `lesson3.cpp`(或你喜欢的名字,扩展名 `.cpp`):
```cpp
#include <iostream>
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 <iostream>
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`