C++ 结构体_指针_函数例题

问题遇到的现象和发生背景

不明白为什么我的随机数只赋值了一遍,不明白为什么我的teacher就打印了一遍

问题相关代码,请勿粘贴截图
#include 
#include 
#include 
using namespace std;

// 学生结构体
struct Student
{
    // 学生姓名
    string Name_stu;

    // 学生分数(随机数)
    int Score;
};

// t结构体
struct Teacher
{
    // t姓名
    string Name_tch;

    // 学生数组
    struct Student Array_stu[5];
};

// 函数声明

// 命名函数
void Allocate_name(struct Teacher Array_tch[], int len_tch, int len_stu);
// 传入t数组,t数组长度,学生数组长度

// 打印函数
void Print_result(struct Teacher Array_tch_fun[], int len_tch, int len_stu);
// 传入t数组,t数组长度,学生数组长度

int main()
{

    // 1.创建一个有三个t的数组

    struct Teacher Array_tch[3];

    // 2.给每个t名字,给每个学生赋值名字和分数(随机数)

    int len_tch = sizeof(Array_tch) / sizeof(Array_tch);
    int len_stu = sizeof(Array_tch->Array_stu) / sizeof(Array_tch->Array_stu[0]);
    Allocate_name(Array_tch, len_tch, len_stu);

    // 3.打印出结果

    Print_result(Array_tch, len_tch, len_stu);

    return 0;
}



// 命名和赋值函数
void Allocate_name(struct Teacher Array_tch[], int len_tch, int len_stu)
{
    string Nameseed = "ABCDE";
    
    // teacher 命名
    for (int i = 0; i < len_tch; i++)
    {
        Array_tch[i].Name_tch = "Teacher_";
        Array_tch[i].Name_tch += Nameseed[i];

        // student 命名
        for (int j = 0; j < len_stu; j++)
        {
            Array_tch[i].Array_stu[j].Name_stu = "Student_";
            Array_tch[i].Array_stu[j].Name_stu += Nameseed[j];

            // student 赋分
            srand((unsigned)time(NULL));
            int num = rand() % 101; // 0到100
            
            Array_tch[i].Array_stu[j].Score = num;
        }
    }
}


// 打印函数
void Print_result(struct Teacher Array_tch_fun[],int len_tch, int len_stu)
{
    // 打印t信息
    for (int i = 0; i < len_tch; i++)
    {
        cout << Array_tch_fun[i].Name_tch << "\t" << endl;

        // 打印学生姓名和分数
        for (int j = 0; j < len_stu; j++)
        {
            cout << Array_tch_fun[i].Array_stu[j].Name_stu << "\t"
                 << "得分:" << "\t" << Array_tch_fun[i].Array_stu[j].Score << "\t" << endl;
        }
        cout << endl;
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

解决不了

我想要达到的结果

ABC t各带ABCDE五个学生,

img

len_tch算错了,srand放到main里面只调用一次

把srand((unsigned)time(NULL));调用放到main函数里。不要每次调用rand时,重新调用srand,这样每次产生的随机数会相同的

关于随机种子播撒的问题,建议去看一下:

C++ 产生随机数函数_小天狼星_布莱克的博客-CSDN博客 rand() 随机函数可以用来生成数据量大的测试数据、可以用来编游戏等,十分实用。此函数是 int 类型,可以直接输出,也可以赋值,非常方便。这样,每次输出的数就是不同的了。C++ 产生随机数的函数非常简单 :rand()结果发现每次运行的结果都是 41。... https://blog.csdn.net/DUXS11/article/details/126178054?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165993087116781432944213%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165993087116781432944213&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-126178054-null-null.nonecase&utm_term=%E9%9A%8F%E6%9C%BA%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4450