我这代码怎么运行出这样的结果?

图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明

问题应该出在printstudent函数的传递参数i上,我在visual c++上测试了一下,如果是将结构体数据直接赋值的话,输出没有问题:

 struct Student {
    char name[20];
    int age;
    struct Score score;
}stu[2]= {"hkx",20,{95,92,90},"zl",19,{99,98,97}};

但是如果是在该输出函数之后(比如在main函数中)再行赋值,就会输出0结果。
究其原因,应当是传递参数i时,不能将结构体的值直接传递。
但是细查之下,我也不是太清楚。建议题主将传递参数改为结构体本身。

考虑做如下改动:
第一,printstudent(i)函数一行语句改为:

 Student *p = &stu[i];
 printstudent(p);

然后,将printstudent函数改写成类似如下语句:

 void printstu(Student *p) {
    printf("%s\t%d\t%f\t%f\t%f\t",p->name,p->age,p->score.english,p->score.math,p->score.yuwen);
}

即可输出正确结果。

至于为什么年龄分数就没数据,其他字符串之类的有数据,我也不太清楚,不好意思啦~