你这p1永远不会等于NULL啊
while循环改成while(!feof(fp))
你这不是个死循环么,一直在分配p1空间,那while条件永远满足啊
这段代码这么改,供参考:
rewind(fp);
head = NULL;
p1 = p2 = NULL;
printf("学号\t姓名\tC语言成绩\t数学成绩\t英语成绩\t总分\t平均分\n");
while (1)
{
p1 = (listNOde*)malloc(sizeof(listNode));
p1->next = NULL;
if (fscanf(fp, "%s %s %d %d %d %d %f", p1->stu.num, p1->stu.name, &p1->stu.cgrade,
&p1->stu.mgrade, &p1->stu.egrade, &p1->stu.total, &p1->stu.avg) != 7) break;
printf("%s\t%s\t%d\t%d\t%d\t%d\t%f\n", p1->stu.num, p1->stu.name, p1->stu.cgrade,
p1->stu.mgrade, p1->stu.egrade, p1->stu.total, p1->stu.avg);
if (head == NULL) {
head = p1;
head->next = NULL;
p2 = p1;
}
else {
p2->next = p1;
p2 = p1;
}
}
p2->next = NULL;
fclose(fp);
return head;