新手刚学C 关于一个链表遍历的问题 求解
typedef struct student
{
char name[20];
char sno[20];
int result;
struct student* next;
};
void main(int argc, char* argv[])
{
student *head=NULL,*p=NULL,*q=NULL;
for(int i=0;i<10;i++)
{
if(p==NULL)
{
if((p=(student*)malloc(sizeof(student)))==NULL)
{
printf("内存申请错误");
return;
}
p->next=NULL;
printf("输入姓名:");
scanf("%s",p->name);
printf("输入成绩:");
char temp[20];
scanf("%s",temp);
p->result=atoi(temp);
if(p->result<0)
{
printf("程序结束\n");
return;
}
printf("输入学号:");
scanf("%s",p->sno);
if(head==NULL)
{
head=p;
}
q=head;
while(q!=NULL)
{
printf("姓名:%s,成绩:%d,学号:%s\n",q->name,q->result,q->sno);
q=q->next;
}
p=p->next;
}
}
printf("达到人数上限,程序结束");
}
如题,为什么在以下这一步遍历只能打印出头节点,其他非空的节点都遍历不到吗.
while(q!=NULL)
{
printf("姓名:%s,成绩:%d,学号:%s\n",q->name,q->result,q->sno);
q=q->next;
}