save code
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
# 第 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`
|
||||
Reference in New Issue
Block a user