学生成绩统计问题动态结构体变量

问题遇到的现象和发生背景

我又来了,今天用C写一个学生的成绩统计遇到的问题,代码如下,问题是如何动态的定义一个结构体变量,因为不确定要输入几个同学的成绩,所以就无法确定有几个结构体变量,知道的小伙伴一定要告知一下

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct student
{
    char xm[10];
    int xh[5];
    float yy[3];
    float sx[3];
    float c[3];
};

int main()
{
    int n = 0;
    printf("请问有几个学生?");
    scanf("%d", &n);
    struct student a[100];
    for (int i = 0; i < n; i++)
    {
        printf("请输入第%d位同学的信息.\n", i + 1);
        printf("姓名、学号、语文、数学、C语言:");
        scanf("%c", &a[i].xm);
        scanf("%d", &a[i].xh);
        scanf("%f", &a[i].yy);
        scanf("%f", &a[i].sx);
        scanf("%f", &a[i].c);
    }
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    char xm[10];
    int xh;
    float yy;
    float sx;
    float c;
} student;

int main()
{
    int n = 0;
    printf("请问有几个学生?");
    scanf("%d", &n);
    student *a = (student *)malloc(sizeof(student) * n);
    for (int i = 0; i < n; i++)
    {
        printf("请输入第%d位同学的信息.\n", i + 1);
        printf("姓名、学号、语文、数学、C语言:");
        scanf("%s", a[i].xm); //字符串不需要加&,用%s
        scanf("%d", &a[i].xh);
        scanf("%f", &a[i].yy);
        scanf("%f", &a[i].sx);
        scanf("%f", &a[i].c);
    }

    return 0;
}

修改处见注释,供参考:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
struct student
{
    char xm[10];
    int  xh;  //int  xh[5]; 修改
    float yy;//float yy[3];
    float sx; //float sx[3];
    float c;//float c[3];
};

int main()
{
    int n = 0;
    printf("请问有几个学生?");
    scanf("%d", &n);
    struct student* a = (struct student*)malloc(sizeof(struct student)*n);//修改
    //struct student a[100];
    for (int i = 0; i < n; i++)
    {
        printf("请输入第%d位同学的信息.\n", i + 1);
        printf("姓名、学号、语文、数学、C语言:");
        scanf("%s", a[i].xm);//scanf("%c", &a[i].xm); 修改
        scanf("%d", &a[i].xh);
        scanf("%f", &a[i].yy);
        scanf("%f", &a[i].sx);
        scanf("%f", &a[i].c);
    }
    printf("姓名、学号、语文、数学、C语言\n");
    for (int i = 0; i < n; i++){
        printf("%s %d %.2f %.2f %.2f\n",a[i].xm,a[i].xh,a[i].yy,a[i].sx,a[i].c);
    }
    return 0;
}

已经解决了

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct student
{
    char xm[10];
    int xh;
    float yy;
    float sx;
    float c;
};

int main()
{
    int n = 0;
    printf("请问有几个学生?");
    scanf("%d", &n);
    getchar();
    struct student a[100];
    for (int i = 0; i < n; i++)
    {
        
        printf("请输入第%d位同学的信息.\n", i + 1);
        printf("姓名、学号、语文、数学、C语言:");
        scanf("%s", &a[i].xm);
        getchar();
        scanf("%d", &a[i].xh);
        getchar();
        scanf("%f", &a[i].yy);
        getchar();
        scanf("%f", &a[i].sx);
        getchar();
        scanf("%f", &a[i].c);
        getchar();


    }

    for (int i = 0; i < n;i++)
    {
        printf("输出第%d位同学:\n",i+1);
        printf("%s\t", a[i].xm);
        printf("%d\t", a[i].xh);
        printf("%f\t", a[i].yy);
        printf("%f\t", a[i].sx);
        printf("%f\n", a[i].c);
    }
    return 0;
}