首页 > 解决方案 > 为什么它只在最后一个循环点输出学生的信息?即第19个学生

问题描述

我想我正确地存储了内存

    student *Class;     // created an array of 19 total students
    Class = (student *)malloc(sizeof(Class)* 19 );
                                            //taking in the information for each student


    Class->first = (char*)malloc(sizeof(char)* 19 );
    Class->last = (char*)malloc(sizeof(char) * 19 );
    Class->exam1 = (int)malloc(sizeof(int) * 19 );
    Class->exam2 = (int)malloc(sizeof(int) * 19 );
    Class->exam3 = (int)malloc(sizeof(int) * 19 );

在这个循环中,如果我更改“i <20;”,我只会看到第 19 个学生的信息。到“我 < 9;” 它只会输出第 8 个学生的信息。

    for (i = 0; i < 20; i++) {
    scanf("%s", Class->first);
    scanf("%s", Class->last);
    scanf("%d", &Class->exam1);
    scanf("%d", &Class->exam2);
    scanf("%d", &Class->exam3);
    Class->mean = (Class->exam1 + Class->exam2 + Class->exam3) / 3;
    } // 

    for (i = 0; i < 20; i++){
    printf("%s   %s   %f \n", Class->first, Class->last, Class->mean);
    }

这是学生结构的定义

    typedef struct student_info {
    char  *first;
    char  *last;
    int   exam1;
    int   exam2;
    int   exam3;
    float mean;
    } student;

标签: c

解决方案


除了评论中提到的所有附带问题......

在您的两个循环中,一个 withscanf()和一个 with ,从不使用printf()循环变量。 因此,您将所有信息扫描到同一个地方,然后从同一个地方打印 20 (9) 次。 您使用的“地方”非常可疑,您创建它的方式意味着您希望它类似于数组。但是如果不使用(或执行诸如迭代链表之类的操作),您就不能期望在几次相同的值之外得到任何东西。i

i

所以这就是为什么你只得到最后一个学生的输出。

该解决方案太复杂,无法在此处修复,至少没有 MRE 并且您可以遵循的方式进行修复。
涉及主题的关键字是“数组”、“数据类型”、“指针”、“结构数组”、“数组结构”、“循环”。


推荐阅读