c语言结构体数组赋值问题具体如下

有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据
代码如下
#include<stdio.h>
struct Student{
int num;
char name[20];
int score[3];
};
//输入
void input(struct Student stu[]){
for(int i=0;i<10;i++){
scanf("%d",&stu[i].num);
scanf("%s",stu[i].name);
for(int j=0;j<3;j++){
scanf("%d",&stu[i].score[j]);(在结构体中只定义了一个int型的分数,这里是怎么来的3个?不是应该像定义生日一样struct date birthday一样在外面定义
struct date
(int year
int month
int day)以后才能赋值分别3个到student。birthday。month和year和day吗?
}
}

int score[3]是定义了一个int数组,数组长度为3,也就是可以存储三个int,应该是代表三个不同可能的分数追问

那不是指字节长度为3位吗 就像char name[20]一样指20个字节把 不可能定义20个名字数组吧

追答

char name[20]其实就是字符数组,是20个char,不过一般处理字符都是以字符串形式进行的,不用一个字符一个字符的赋值。所以scanf()使用的事%s,如果按char赋值的话应该是%c。访问name中第三个字符也可以用name[2]这种方式

追问

谢谢,好像有点明白了。不过那为什么要像在结构体内定义生日还要在外面定义一个年月日的结构体呢? 直接定义3个int类型不就完了吗

追答

定义结构体其实是为了更好理解,其实定义一个int [3]来到表日期 你自己只要知道每个int代表的含义也是一样的,对机器来说没区别,都是在内存中创建三个int类型的空间。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答