为什么注释的地方,一样的语句,运行结果不同,难道语句不是一句一句读吗,为什么gets怎么例外

#include<stdio.h>
#define num 1
struct stu
{int xh;
char name[20];
float yw;
float sx;
float yy;
}a[num];

struct stu1
{struct stu;
float avare;
float sum;
}a1[num];

void main()
{ int i;
for(i=0;i<num;i++)
{//printf("请输入名字");
//gets(a[i].name);
printf("请输入学号\n");
scanf("%d",&a[i].xh);
//printf("请输入名字");
//gets(a[i].name);
printf("请输入三门科目成绩\n");
scanf("%f%f%f",&a[i].yw,&a[i].sx,&a[i].yy);
}
for(i=0;i<num;i++)
{ a1[i].sum=a[i].yw+a[i].sx+a[i].yy ;
a1[i].avare=a1[i].sum/3;
}

for(i=0;i<num;i++)
{ printf("学号:%d\n",a[i].xh);
printf("名字:%s\n",a[i].name);
printf("语文:%0.1f数学%0.1f英语%0.1f\n",a[i].yw,a[i].sx,a[i].yy);
printf("sum:%0.1f avare=%0.1f\n",a1[i].sum,a1[i].avare);
}

}