想做一个学生成绩管理系统,但是学生人数和课程门数可以自己定义,求大神指教代码哪里改进

#include
struct student
{
char name[20];
float sum, average;
int kemu[10];
};
void main()
{
struct student stu[45];
int a,b,i;
printf("请输入学生的人数,科目门数\n");
scanf("%d%d", &a,&b);
for (i= 0; i<a; i++)
{
printf("请依次输入第%d个学生的姓名:", i++);
scanf("%s", &stu[i].name);
for (i = 0; i < =b; i++)
{
printf("请依次输入各科目分数\n");
scanf("%d", &stu[i].kemu);
}
stu[i].sum = 0;
for (i = 0; i < b; i++)
{
stu[i].sum = stu[i].kemu[i] + stu[i].sum;
}
stu[i].average = stu[i].sum / b;
}
printf("姓名 总成绩 平均成绩\n");
for (i = 0; i<a; i++)
printf("%s %f %f\n",stu[i].name,stu[i].sum,stu[i].average);
}

建议: 1.添加科目名称,English, Math ... ,方便阅读。
2.以学号为唯一标识比用姓名好,有些同班还有同名的呢。
3.真正的系统是需要数据保存的,且不说使用数据库,但可以使用文本记录这些分数。
4.可以考虑支持纠错,就是万一输入错了,想要更改,怎么更改。这个稍微难点,有时间兴趣可以试试。

scanf("%s", &stu[i].name); 这句, 改为scanf("%s", stu[i].name);

c语言你要这样写,就看看结构体和链表那一块吧

#include
struct student
{
char name[20];
float average;
int sum,kemu[10];
};
struct student stu[45];
int a, b, i, j;
int sum(int kemu[10]);
struct student stu[45];
void main()
{
printf("请输入学生的人数,科目门数\n");
scanf("%d%d", &a,&b);
for (i = 1; i < a + 1; i++)
{
printf("请输入第%d个学生的姓名:", i);
scanf("%s", stu[i].name);
for (j = 1; j < b + 1; j++)
{
printf("请依次输入科目分数\n");
scanf("%d", &stu[i].kemu[i]);
}
}
for (i = 1; i < a + 1; i++)
{
stu[i].sum = sum(stu[i].kemu);
stu[i].average = stu[i].sum / b;
}
printf("姓名 总成绩 平均成绩\n");
for (i = 1; i < a+1; i++)
{
printf("%s %d %f\n", stu[i].name, stu[i].sum, stu[i].average);
}
}

int sum(int kemu[10])
{
int sum = 0;
for (i = 0; i<b; i++)
{
sum =kemu[i]+sum;
}
return sum;

}
为什么出不来我想要的结果?

#include<stdio.h>
struct stu{
    char stuName[100];
    int stuNumber[100];
    double projectScore[100];
    double averScoer[100];

}stu;
void main(){
double total =0;
 static     struct stu info[100];
    printf("请输入学生人数和科目数\n");
    int stuN,proN;
    scanf("%d %d",&stuN,&proN);
    for(int i =0;i<stuN;i++){
        printf("请输入学生名称\n");
        scanf("%s",&info[i].stuName[i]);
        for(int j =0;j<proN;j++){
            printf("请输入第%d科科目的成绩\n",j);
            scanf("%lf",&info[i].projectScore[j]);
        }

    }
    for(int k=0;k<stuN;k++){
        for(int m=0;m<proN;m++){
            total=total+info[k].projectScore[m];
        }   
        info[k].averScoer[k]=total/proN;
        total=0;
    }
    for(int x=0;x<stuN;x++ ){
        printf("同学姓名为:");
        putchar(info[x].stuName[x]);
        printf("\n");
        for(int y=0;y<proN;y++){
        printf("第%d科目的成绩为 %lf \n",y,info[x].projectScore[y]);
        }
        printf("平均成绩为:%lf",info[x].averScoer[x]);
    }


}

按照你写的意思来的,不过还是存在很大问题,如果我定义的人数超过100呢,所以说这种方法还是不够好的。我仅仅是按照你代码的意思写的。