C语言中如何将文件中的数据读取到链表中
现在可以实现保存到文件了,但是读取不知道怎么读取,读取的过程是txt文件里的每行数据放入一个链表结点,下一行放入另一个结点。structinfo{charnum[10];...
现在可以实现保存到文件了,但是读取不知道怎么读取,读取的过程是txt文件里的每行数据放入一个链表结点,下一行放入另一个结点。
struct info
{
char num[10];
char name[20];
double score[N];
double sum;
double aver;
};
typedef struct student
{
struct info handle;
struct student *next;
}STU,*LinkList;
我的保存函数是这样的
int SaveFile(const LinkList head)
{
LinkList p = head->next;
FILE *fp = NULL;
fp = fopen("student.txt","w+");
if(fp == NULL)
{
fclose(fp);
return ERROR;
}
fprintf(fp,"学号 姓名 语文 数学 外语 总分 平均分\n");
while(p)
{
fprintf(fp,"%s %6s %3.1f %3.1f %3.1f %3.1f
%3.1f\n",p->handle.num,p->handle.name,p->handle.score[0],p->handle.score[1],p->handle.score[2],
p->handle.sum,p->handle.aver);
p = p->next;
}
fclose(fp);
return OK;
} 展开
struct info
{
char num[10];
char name[20];
double score[N];
double sum;
double aver;
};
typedef struct student
{
struct info handle;
struct student *next;
}STU,*LinkList;
我的保存函数是这样的
int SaveFile(const LinkList head)
{
LinkList p = head->next;
FILE *fp = NULL;
fp = fopen("student.txt","w+");
if(fp == NULL)
{
fclose(fp);
return ERROR;
}
fprintf(fp,"学号 姓名 语文 数学 外语 总分 平均分\n");
while(p)
{
fprintf(fp,"%s %6s %3.1f %3.1f %3.1f %3.1f
%3.1f\n",p->handle.num,p->handle.name,p->handle.score[0],p->handle.score[1],p->handle.score[2],
p->handle.sum,p->handle.aver);
p = p->next;
}
fclose(fp);
return OK;
} 展开
2个回答
展开全部
我刚好在做项目,学生管理系统。。。。。给你一个封装好的把
void load(PNODE head)
{
STU stu;
FILE* fp=fopen("stu.txt","rb");
assert(fp!=NULL);
while(fread(&stu,sizeof(STU),1,fp))
{
add_node(head,&stu);
}
}
PNODE create_node()
{
PNODE pnode=(PNODE)malloc(sizeof(NODE));
assert(pnode!=NULL);
return pnode;
}
void init_node(PNODE pnode,PSTU pstu)
{
pnode->stu=*pstu;
pnode->next=NULL;
}
void insert_node(PNODE head,PNODE pnode)
{
pnode->next=head->next;
head->next=pnode;
}
void add_node(PNODE head,PSTU pstu)
{
PNODE pnode=create_node();
init_node(pnode,pstu);
insert_node(head,pnode);
}
void load(PNODE head)
{
STU stu;
FILE* fp=fopen("stu.txt","rb");
assert(fp!=NULL);
while(fread(&stu,sizeof(STU),1,fp))
{
add_node(head,&stu);
}
}
PNODE create_node()
{
PNODE pnode=(PNODE)malloc(sizeof(NODE));
assert(pnode!=NULL);
return pnode;
}
void init_node(PNODE pnode,PSTU pstu)
{
pnode->stu=*pstu;
pnode->next=NULL;
}
void insert_node(PNODE head,PNODE pnode)
{
pnode->next=head->next;
head->next=pnode;
}
void add_node(PNODE head,PSTU pstu)
{
PNODE pnode=create_node();
init_node(pnode,pstu);
insert_node(head,pnode);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怎么写进去的就怎么读出来,相同的格式,用fscanf把数据读出来,然后用这些数据重新生成链表就可以了
更多追问追答
追问
请问下怎么重新生成啊,我自己写了个可是读不进去数据,能帮我看下吗?
追答
跟创建链表是一样的
贴代码我看下吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询