为什么ID的输出少了一个零

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

img

img

#include<stdio.h>
struct student{
    char xm[21];
    char xh[21];
    int cj[5];
    double average;
    int sum;
};
int main()
{
    int i,loc,temp;
    struct student stu;
    struct student *stuptr;
    gets(stu.xm);
    getchar();
    gets(stu.xh);
    stu.sum=0;
    for(i=0;i<5;i++){
        scanf("%d",&stu.cj[i]);
        stu.sum+=stu.cj[i];
    }
    stu.average=stu.sum*1.0/5;
    for(loc=4;loc>0;loc--){
        for(i=0;i<loc;i++){
            if(stu.cj[i]<stu.cj[i+1]){
                temp=stu.cj[i];
                stu.cj[i]=stu.cj[i+1];
                stu.cj[i+1]=temp;
            }
        }
    }
    stuptr=&stu;
    printf("Name:%s\n",stuptr->xm);
    printf("ID:%s\n",stuptr->xh);
    printf("Score:");
    for(i=0;i<4;i++){
        printf("%d ",stu.cj[i]);
    }
    printf("%d\n",stu.cj[4]);
    printf("average:%.2lf total:%d\n",stu.average,stu.sum);
    return 0;
}

img

去掉getchar()

题中对学号这个字符数组进行的操作只有输入输出,不知道哪里出问题了,求助大家