为什么Ctrl+z后有一个空行?

#include
struct date
{
int y;
int m;
int d;
};
struct student
{
char num[15];
char name[30];
struct date bir;
}s;
int main()
{ while((scanf("%s",s.num))!=NULL)
{scanf("%s%d.%d.%d",s.name,&s.bir.y,&s.bir.m,&s.bir.d);
printf("%s\n%s\n%04d.%02d.%02d\n",s.num,s.name,s.bir.y,s.bir.m,s.bir.d);

}
return 0;
}

while((scanf("%s",s.num))!=EOF)