帮忙看一个很简单的C语言关于链表和文件的函数

来源:百度知道 编辑:UC知道 时间:2024/05/11 04:40:58
现在要求做一个学生信息管理的系统 要求用链表 然后保存到文件 老师给的参考函数注释如下:
Struct StuInfor * readStuInfor( … )
//从文件读取学生信息到一个学生信息链表,并返回该链表的头指针
{
//销毁已存在的学生信息链表
//打开学生信息文件
//从文件读入学生信息,并构造新的学生信息链表
//返回学生信息链表的头指针,如果没有学生信息文件,则返回NULL
}

请问什么是销毁已存在的学生信息链表?
我现在的问题是:几条信息能够正常保存到文件 但是重新运行程序时如果要要求显示全部信息 只能显示最后输入的一条!
我的这个函数有什么问题吗?
StuInfor *readStuInfor()
{ FILE *fp1;
StuInfor *head,*p1,*p2;
head=p1=NULL;
if((fp1=fopen("StudentInfo.txt","r"))==NULL)
return NULL;
else {
rewind(fp1);
p2=(StuInfor *)malloc(sizeof(StuInfor));
while(fread(p2,sizeof(StuInfor),1,fp1)==1){
if(head==NULL)
head=p1=p2;
else {p1->next=p2; p1=p2;p1->next=NULL;}
}
fclose(fp1);
return head;
}
}
请教达人!不胜感激!完成后再追加分数!谢谢!!
谢谢你啊!果然点出了我的错误!但是我照你的意思修改了程序为什么还是老问题啊?麻烦指教下!谢谢!

StuInfor *readStuInfor()
{ FILE *fp1;
sta

你拿这个再试一次
StuInfor *readStuInfor()
{
FILE *fp1;
static StuInfor *head=NULL;
StuInfor *p1,*p2;
if((fp1=fopen("StudentInfo.txt","r"))==NULL)
return NULL;
else
{
p2=(StuInfor *)malloc(sizeof(StuInfor));
while(fread(p2,sizeof(StuInfor),1,fp1)==1)
{
if(head==NULL)head=p1=p2;
else
{
p1->next=p2;
p1=p2;
}
p2=(StuInfor *)malloc(sizeof(StuInfor));
}
p1->next=NULL;
}
return head;
}

你总共只分配了一次内存,当然只有一个了
p2=(StuInfor *)malloc(sizeof(StuInfor));
while(fread(p2,sizeof(StuInfor),1,fp1)==1)
{
if(head==NULL)
head=p1=p2;
else
{
p1->next=p2;
p1=p2;
p1->next=NULL;
p2 = (StuInfor *)malloc(sizeof(StuInfor)); //每读取一次,重新分配一次内存
}
}

/