请大佬帮忙看看这段建立动态链表的代码哪里出问题了(总是输入一组数据后就跳出运行了):
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(sd)
typedef struct Student
{
long num;
char* name;
double score;
struct Student * next;
}sd;
sd * creat(void);
int n;
int main(void)
{
sd * pt;
pt=creat();
printf("%-10s%-10s%-10s\n","num:","name:","score:");
while(pt!=NULL)
{
printf("%-10ld%-10s%-10.2lf\n",pt->num,pt->name,pt->score);
pt=pt->next;
}
putchar(10);
printf("Finish!\n");
return 0;
}
sd * creat(void)
{
sd *head,*p1,*p2;
p1=p2=(sd*)malloc(LEN);
head=NULL;
printf("请输入学生的学号、姓名和成绩:(以学号为零结束输入)\n");
scanf("%ld %s %lf",&p1->num,p1->name,&p1->score);
n=0;
while(p1->num!=0)
{
n+=1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(sd*)malloc(LEN);
scanf("%ld %s %lf",&p1->num,p1->name,&p1->score);
}
p2->next=NULL;
return(head);
}