m0_73784819 2024-05-17 22:07 采纳率: 69.2%
浏览 2
已结题

求专家解答关于结构体数组嵌套的问题

学校正在做毕设项目,每名teacher各有五个学生。 一共三名teacher
设计teacher和学生的结构体,其中在teacher的结构体中,有teacher姓名和一个存放5名学生的数组作为学员.
学生含姓名,分数, 创建数组存放3个teacher,
通过函数给每个teacher以及学生赋值, 最终打印出teacher的数据 以及所带学生的数据

#include
using namespace std;
struct student{ string name;int age;int sor; };
struct teacher { string name;student *s[5]; };//创建学生数组5个数据
void 打印(struct teacher a[], int slen)
{

for (int i = 0;i < 3;i++)
{
    cout << a[i].name << "teacher的学生有:" << endl;
    for (int j = 0;j < slen-1;j++)
    {
        cout << "姓名: " << a[i].s[j]->name << "    " << endl;
        cout << "年龄: " << a[i].s[j]->age << "    " << endl;
        cout << "分数: " << a[i].s[j]->sor << "    " << endl;
    }
}

};

int main()
{

student s1[5] = { {"陈一",15,85}, {"陈二",25,75}, {"陈三",40,67}, {"陈四",27,98}, {"陈五",32,15} };
student s2[5] = { {"王一",40,45}, {"王二",45,70}, {"王三",15,73}, {"王四",47,49}, {"王五",47,93} };
student s3[5] = { {"李一",19,77}, {"李二",24,67}, {"李三",27,62}, {"李四",42,74}, {"李五",28,36} };
teacher teacher[3] = { { "王八一",s1 },{ "王八二",s2 },{ "王八三",s3 } };
打印(teacher, 5);

system("pause");

return 0;

}
编译器没有显示代码错误,但是运行就出错,请问下代码应该怎么修改才能正常运行?
我现在是用student 这里有三个5个内容的数组,然后把他嵌套到teacher这个数组里。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-17 22:07
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题:

    您的问题是要解决在C++中如何正确地定义和使用结构体数组,特别是当一个结构体(teacher)包含另一个结构体(student)的数组作为成员时,如何正确地初始化和访问这些结构体数组,以及如何修复运行时的错误。

    问题出现原因:

    1. teacher结构体中,student *s[5];应该是一个指向student数组的指针,而不是一个数组。
    2. 打印函数中,slen-1应该改为5,因为您要打印的是5个学生的信息。
    3. system("pause")是特定于Windows的命令,可能在其他操作系统上不工作。

    问题解决方案:

    1. teacher结构体中的student *s[5];改为student s[5];
    2. 修正打印函数中的循环条件,确保打印所有学生的信息。
    3. 移除或替换system("pause")以适用于您的开发环境。

    提供代码:

    以下是修改后的代码:

    #include <iostream>
    using namespace std;
    
    struct student {
        string name;
        int age;
        int sor;
    };
    
    struct teacher {
        string name;
        student s[5]; // 修改为数组
    };
    
    void 打印(struct teacher a[], int slen)
    {
        for (int i = 0; i < 3; i++) {
            cout << a[i].name << " teacher的学生有:" << endl;
            for (int j = 0; j < 5; j++) { // 修改为5
                cout << "姓名: " << a[i].s[j].name << "    " << endl;
                cout << "年龄: " << a[i].s[j].age << "    " << endl;
                cout << "分数: " << a[i].s[j].sor << "    " << endl;
            }
        }
    }
    
    int main()
    {
        student s1[5] = { {"陈一", 15, 85}, {"陈二", 25, 75}, {"陈三", 40, 67}, {"陈四", 27, 98}, {"陈五", 32, 15} };
        student s2[5] = { {"王一", 40, 45}, {"王二", 45, 70}, {"王三", 15, 73}, {"王四", 47, 49}, {"王五", 47, 93} };
        student s3[5] = { {"李一", 19, 77}, {"李二", 24, 67}, {"李三", 27, 62}, {"李四", 42, 74}, {"李五", 28, 36} };
        teacher teacher[3] = { {"王八一", s1}, {"王八二", s2}, {"王八三", s3} };
        打印(teacher, 5);
    
        // 如果您使用的是Windows,可以保留下面的代码;否则,您可以移除它
        // system("pause");
    
        return 0;
    }
    

    代码运行方式:

    1. 将上述代码复制到C++编译器中。
    2. 编译并运行程序。

    代码预期运行结果:

    王八一 teacher的学生有:
    姓名: 陈一    年龄: 15    分数: 85    
    姓名: 陈二    年龄: 25    分数: 75    
    姓名: 陈三    年龄: 40    分数: 67    
    姓名: 陈四    年龄: 27    分数: 98    
    姓名: 陈五    年龄: 32    分数: 15    
    王八二 teacher的学生有:
    姓名: 王一    年龄: 40    分数: 45    
    姓名: 王二    年龄: 45    分数: 70    
    姓名: 王三    年龄: 15    分数: 73    
    姓名: 王四    年龄: 47    分数: 49    
    姓名: 王五    年龄: 47    分数: 93    
    王八三 teacher的学生有:
    姓名: 李一    年龄: 19    分数: 77    
    姓名: 李二    年龄: 24    分数: 67    
    姓名: 李三    年龄: 27    分数: 62    
    姓名: 李四    年龄: 42    分数: 74    
    姓名: 李五    年龄: 28    分数: 36    
    

    推荐相关链接:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 已采纳回答 5月17日
  • 创建了问题 5月17日