这个为啥最后从文件中读取不出数据啊?

img


这儿哪里需要修改,请教

你这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;