输入的学号变成了成绩,而输入的成绩则为零

现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100
#include<stdio.h>
void input(int N,int num[N],int score[N][3],char name[20],int i,int j)
{
for(i=0;i<N;i++)
{
printf("Please input students num:");
scanf("%d",&num[i]);
printf("Please input students name:");
gets(&name[i]);
for(j=0;j<3;j++)
{
printf("Please input scores:");
scanf("%d",&score[i][j]);
}
}
}
void print(int N,int num[N],int score[N][3],char name[20],int i,int j)
{
for(i=0;i<N;i++)
{
printf("学号 = %d\n",num[i]);
puts(name[i]);
getchar();
for(j=0;j<3;j++)
{
printf("分数 = %d\n",score[i][j]);

   }

}
}
int main()
{
int N = 0;
int i,j,num[N],score[N][3];
char name[20];
scanf("%d",&N);
input(N,num,score,name,i,j);
print(N,num,score,name,i,j);
return 0;
}

先输入n,再用n设置数组长度
scanf("%d", &N);
int num[N], score[N][3];

name要定义为二维数组
char name[N][20]
你题目的解答代码如下:

#include <stdio.h>
void input(int N, int num[N], int score[N][3], char name[N][20])
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        printf("Please input students num:");
        scanf("%d", &num[i]);
        printf("Please input students name:");
        getchar();
        gets(name[i]);
        for (j = 0; j < 3; j++)
        {
            printf("Please input scores:");
            scanf("%d", &score[i][j]);
        }
    }
}
void print(int N, int num[N], int score[N][3], char name[N][20])
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        printf("学号 = %d\n", num[i]);
        puts(name[i]);
        for (j = 0; j < 3; j++)
        {
            printf("分数 = %d\n", score[i][j]);
        }
    }
}
int main()
{
    int N = 0;
    scanf("%d", &N);
    char name[N][20];
    int num[N], score[N][3];
    input(N, num, score, name);
    print(N, num, score, name);
    return 0;
}

如有帮助,望采纳!谢谢!

name应该定义为二维数组
char name[N][20]才行
不然你只有一个名字