C语言小白求助!!为什么输出是乱码?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10

struct student
{
    char Name[10];
	char ID[10];
    int Math;
	int English;
	int Chinese;
}stu[50];
void Input()
{
    printf("请输入学生信息\n");
    printf("\t\t姓名	学号    Math    English		Chinese\n");
    for(int i=0;i<SIZE;i++)
    {
        printf("\t\t");
        scanf("%s%s%d%d%d",stu[i].Name,stu[i].ID,&stu[i].Math,&stu[i].English,&stu[i].Chinese);
    }
}
void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("student.dat","wb"))==NULL)
    {
        printf("cannot open file\n");
        return;
    }
    for(i=0;i<SIZE;i++)
        if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
            printf("file write error\n");
        fclose(fp);
}

int main()
{
    Input();
    save();
    return 0;
}




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

struct student
{
    char Name[10];
	char ID[10];
    int Math;
	int English;
	int Chinese;
}stu[50];
void Chinese_sort(struct student *p,int n);
void Math_sort(struct student *p,int n);
void English_sort(struct student *p,int n);
void Chinese_sort(struct student *p,int n)
{
      int i,j;
      struct student temp;
      for(i=0;i<n-1;i++)
          for(j=0;j<n-1-i;j++){
              if((p+j)->Chinese>(p+j+1)->Chinese){
                  temp=*(p+j);
                  *(p+j)=*(p+j+1);
                  *(p+j+1)=temp;
              }
          }
 }
 void English_sort(struct student *p,int n)
{
      int i,j;
      struct student temp;
      for(i=0;i<n-1;i++)
          for(j=0;j<n-1-i;j++){
              if((p+j)->English>(p+j+1)->English){
                  temp=*(p+j);
                  *(p+j)=*(p+j+1);
                  *(p+j+1)=temp;
              }
          }
 }
 void Math_sort(struct student *p,int n)
{
      int i,j;
      struct student temp;
      for(i=0;i<n-1;i++)
          for(j=0;j<n-1-i;j++){
              if((p+j)->Math>(p+j+1)->Math){
                  temp=*(p+j);
                  *(p+j)=*(p+j+1);
                  *(p+j+1)=temp;
              }
          }
 }
int main()
{
    struct student stu[50],*p;
    p=stu;
    int n=10;
    printf("语文排序如下:\n\n");
    Chinese_sort(p,n);
    for(int i=0;i<10;i++)
		 {
         printf("\t\t姓名\t学号\t成绩\n");
         printf("\t\t%s\t%s\t%d\n",stu[i].Name,stu[i].ID,stu[i].Chinese);
         }
    printf("数学排序如下:\n\n");
    Math_sort(p,n);
    for(int i=0;i<10;i++)
		 {
         printf("\t\t姓名\t学号\t成绩\n");
         printf("\t\t%s\t%s\t%d\n",stu[i].Name,stu[i].ID,stu[i].Math);
         }
    printf("英语排序如下:\n\n");
    English_sort(p,n);
    for(int i=0;i<10;i++)
		 {
         printf("\t\t姓名\t学号\t成绩\n");
         printf("\t\t%s\t%s\t%d\n",stu[i].Name,stu[i].ID,stu[i].English);
         }
    return 0;
}

 

结构体数组指针p里面并没有实质数据

下面的main函数结构体没有初始化,所以值是系统随机分配的