Files
chouka/old/第07课-卡片与数组.md
2026-05-16 11:09:02 +08:00

4.1 KiB
Raw Permalink Blame History

第 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]
  • 若有 3 张卡,有效下标是 02没有 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 改成 02 再试。


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 得到 02,正好当这三张的编号
stringint 不同 算卡名用 string;第几张、下标、随机 0/1/2 用 int

6. 怎么编译和运行

clang++ -std=c++17 -o lession7 lession7.cpp
./lession7

(若和随机数、循环写在同一个 .cpp 里,所有需要的 #include 都写上。)


7. 本课课堂小练习

  1. cards[3] 改成 4 张卡cards[4]),自己写四个名字,用 std::rand() % 4 随机抽一张并打印名字。
  2. fori = 0i < 3,在循环里 cout 打印 cards[i],看是否按顺序列出一排卡名。

8. 本课课后作业(选做)

  • 在每一张卡名后面,再存一个 等级数字 太麻烦,以后可以用 结构体;本选做可改成:两张表std::string cards[3]int level[3],下标相同表示同一张卡的名字和等级,打印时两个一起输出。
  • 问家长:生活中哪些东西像「下标从 0 开始」?(例如有的小区楼层、有国家的年级说法不同——先当聊天即可。)

9. 常见小问题

  • 忘了 #include <string>:可能报错找不到 string 类型。
  • 写了 cards[3] 只有三格,却用 id = 3:越界,要改成 id 在 02,或把数组开大一点。
  • 中文在终端乱码:与系统编码有关,可先全用 英文/拼音 当卡名测试,再让家长和终端设置一起调。

10. 下一课预告

第 8 课学 函数void):把「抽一次」打成一包,用 draw_once() 多次调用,代码更整齐。


学完请家长在 学习进度与状态.md 里更新第 7 课的状态与作业完成情况。

下一课文档第08课-函数与抽一次.md