4.1 KiB
4.1 KiB
第 7 课:卡片与数组(string 数组)
本课目标:用 数组 存好多张卡的名字,用 编号(下标) 取出其中一张。学会 std::string 和 下标从 0 开始。
复习:第 6 课里每次有一张「结果」;本课在随机数上再往前一步,让结果变成 某一张具体卡 的名字。
1. 这一课要搞懂什么
- 一张卡有名字(文字),在 C++ 里常用
std::string表示一串字(不是本课的整数int)。 - 很多张卡 可以排成一行放进 数组里:
std::string cards[3]表示有 3 个格子(编号0、1、2)。 - 下标永远从 0 开始:
- 第 1 张是
cards[0] - 第 2 张是
cards[1] - 第 3 张是
cards[2]
- 第 1 张是
- 若有 3 张卡,有效下标是 0~2,没有
cards[3](会越界,程序可能出错)。
头文件:写 std::string 前要加一行 #include <string>。
2. 最简示例:三张卡、打印其中一张
保存为 lession7.cpp:
#include <iostream>
#include <string>
int main() {
std::string cards[3];
cards[0] = "小火龙";
cards[1] = "皮卡丘";
cards[2] = "妙蛙种子";
int id = 1;
std::cout << "你选中的卡:" << cards[id] << "\n";
return 0;
}
运行会打印 皮卡丘(因为 id 是 1,对应下标 1)。把 id 改成 0 或 2 再试。
3. 随机从三张里抽一张(和抽卡最相关)
3 个下标是 0、1、2,随机一个下标用:
int id = std::rand() % 3; // 0 或 1 或 2
std::cout << "抽到:" << cards[id] << "\n";
注意:若用随机,要在 main 最前面先写 std::srand(std::time(nullptr));(和前几课一样),并加上 #include <cstdlib> 与 #include <ctime>。
4. 和稀有度、多抽怎么拼?(进阶思路)
- 本课可以只做:在「普通 / 稀有」某一档里,再随机出 具体卡名(用
cards[id])。 - 也可以先生成
r判稀有度,分支里 用 不同的小数组 或 同数组不同下标范围(慢慢加,不着急一次写完)。
和 第 6 课 的拼法:在 for 的每一轮里,除了打印「普通/稀有」,再打印 cards[某个 id]。
5. 本课必须记住的规矩
| 点 | 说明 |
|---|---|
| 3 格数组 | 合法下标是 0、1、2 |
% 3 |
得到 0~2,正好当这三张的编号 |
string 与 int 不同 |
算卡名用 string;第几张、下标、随机 0/1/2 用 int |
6. 怎么编译和运行
clang++ -std=c++17 -o lession7 lession7.cpp
./lession7
(若和随机数、循环写在同一个 .cpp 里,所有需要的 #include 都写上。)
7. 本课课堂小练习
- 把
cards[3]改成 4 张卡(cards[4]),自己写四个名字,用std::rand() % 4随机抽一张并打印名字。 - 用
for从i = 0到i < 3,在循环里cout打印cards[i],看是否按顺序列出一排卡名。
8. 本课课后作业(选做)
- 在每一张卡名后面,再存一个 等级数字 太麻烦,以后可以用 结构体;本选做可改成:两张表—
std::string cards[3]和int level[3],下标相同表示同一张卡的名字和等级,打印时两个一起输出。 - 问家长:生活中哪些东西像「下标从 0 开始」?(例如有的小区楼层、有国家的年级说法不同——先当聊天即可。)
9. 常见小问题
- 忘了
#include <string>:可能报错找不到string类型。 - 写了
cards[3]只有三格,却用id = 3:越界,要改成id在 0~2,或把数组开大一点。 - 中文在终端乱码:与系统编码有关,可先全用 英文/拼音 当卡名测试,再让家长和终端设置一起调。
10. 下一课预告
第 8 课学 函数(void):把「抽一次」打成一包,用 draw_once() 多次调用,代码更整齐。
学完请家长在 学习进度与状态.md 里更新第 7 课的状态与作业完成情况。
下一课文档:第08课-函数与抽一次.md