Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么它只为最后一个循环点的学生输出信息?i、 e.第十九名学生_C - Fatal编程技术网

C 为什么它只为最后一个循环点的学生输出信息?i、 e.第十九名学生

C 为什么它只为最后一个循环点的学生输出信息?i、 e.第十九名学生,c,C,我想我存储的记忆是正确的 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*)m

我想我存储的记忆是正确的

    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 );

在这个循环中,我只看到了第19个学生的信息,如果我除了评论中提到的所有次要问题之外,还更改了“I”

在这两个循环中,带有
scanf()
的循环和带有
printf()
的循环,循环变量
i
从未使用过。
因此,您将所有信息扫描到同一位置,并从同一位置打印20(9)次。
您使用的“位置”非常可疑,您创建它的方式意味着您希望它类似于一个数组。但是如果不使用
i
(或者做一些类似于遍历链表的事情),您只能多次获得相同的值

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

解决方案太复杂,无法在此处修复,至少在没有MRE的情况下,您可以按照这种方式进行修复。

所涉及主题的关键词为“数组”、“数据类型”、“指针”、“结构数组”、“数组结构”、“循环”。

在所示代码的所有部分中,您仅访问数组的第一个条目。要访问其他条目,请执行
Class[i]。首先,你需要展示学生结构的定义。你不清楚你是在尝试创建一个由数组组成的数组,还是一个由数组组成的数组。看。没错!你不能期望每个人都像你一样思考、做和理解你做的事,除非你告诉我们你做得很好。注意:你只是为每个数组中的19个元素分配存储,但是
i
循环会迭代20个元素。如果开始索引这些数组,则索引将超过数组的末尾,并且在该位置对数据的任何读取或写入都将具有未定义的行为。请注意,大小为19的数组的索引为0..18,因此循环应该是
<19
.Y我们在一个地方使用
<20
,并且
您对问题的编辑使事情变得更加奇怪,但实际上并没有改变任何相关的事情。我假设我现在看到int的地方有指针。但至少您的(不必要的)强制转换现在更有意义了。
    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;