C语言如何将链表里的值写入文件

我用动态链表输入了很多信息,但是最后怎么才能把他们保存到文件里、以及下次要打开这个文件时、应该怎么打开、关于save和load这两个函数要怎么去写... 我用动态链表输入了很多信息,但是最后怎么才能把他们保存到文件里、以及下次要打开这个文件时、应该怎么打开、关于save 和load这两个函数要 怎么去写 展开
 我来答
xoaxa
推荐于2016-12-03 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3489万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct datanode {
char name[24];
char phone[12];
// ......
struct datanode *next;
}*pNode,*LinkList,Node;

LinkList getEmptyList() {
LinkList head = (pNode)malloc(sizeof(Node));
head->next = NULL;
return head;
}

void addNode(LinkList head, pNode pnode) {
pnode->next = head->next;
head->next = pnode;
}

void writeFile(LinkList head) {
FILE *outf;
pNode p = head->next;
if((outf = fopen("data.txt","wt")) == NULL) {
printf("不能打开数据文件。\n");
exit(1);
}
while(p) {
fwrite(p,sizeof(Node),1,outf);
p = p->next;
}
fclose(outf);
}

int main() {
char name[24],phone[12];
// ......
pNode p;
LinkList head = getEmptyList();
printf("姓名 联系电话\n");
while(scanf("%s%s",name,phone) == 2) {
p = (pNode)malloc(sizeof(Node));
strcpy(p->name,name);
strcpy(p->phone,phone);
addNode(head,p);
printf("姓名 联系电话(<Ctrl + Z> <ENTER> 结束)\n");
}
writeFile(head);
return 0;
}
zhr562343414
推荐于2018-02-27
知道答主
回答量:34
采纳率:0%
帮助的人:21.8万
展开全部
先定义一个全局的文件 FILE *fp;
读文件
if((fp=fopen("student.txt","r"))==NULL)/*打开文件*/
{ printf("文件打不开!\n");
exit(1);
}
while(!feof(fp))
{ p=(Student *)malloc(sizeof(Student));
fscanf(fp,"%s%s%s%d%d%d%d%d%d",
p->num,p->name,p->clas,&p->xf.jch,&p->xf.zhy,&p->xf.xx,&p->xf.rw,&p->xf.shy,&p->xf.zx);
p->next=sx->next;
p->prior=sx;
if(sx->next!=NULL)
p->next->prior=p;
sx->next=p;
}
fclose(fp);
写文件
if((fp=fopen("student.txt","w"))==NULL)
{
printf("文件打不开!\n");
exit(1);
}
while(p!=NULL)
{
fprintf(fp,"\n%s %s %s %d %d %d %d %d %d",
p->num,p->name,p->clas,p->xf.jch,p->xf.zhy,p->xf.xx,p->xf.rw,p->xf.shy,p->xf.zx);
p=p->next;
}
fclose(fp);
追问
我用了两个动态链表~~分别保存了不同的结构体里面的信息~~是不是在写这两个函数的时候fprintf和fscanf都得写双份、还有while(!feof(fp))这里没看懂~~能否详细解释下
追答
一、你用了两个链表,好比两个数据库表,肯定是要写两个分别读取和保存对应文件,因为两个数据结构不同,无法重用代码;
二、fp是一个指针,我相信你已经看出来了,while(!feof(fp))是将指针左移并判断指向的地址是否有数据,如果有数据就继续操作,直到没有数据后退出循环,循环里的代码是先申请一个结构的空间,将数据读到这个这个结构变量里,然后再将这个变量插入到结构链表里,如此循环将所有数据读取插入链表就完成了文件的读取操作
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LeoNkl
2013-05-16
知道答主
回答量:8
采纳率:0%
帮助的人:3.5万
展开全部
看一下C语言的基本文件操作吧。。建议使用fwrite(),遍历链表的时候写入就OK。打开文件和这个相反,先看下基础吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式