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

发布网友

我来回答

3个回答

热心网友

灞曞紑鍏ㄩ儴#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;
}

热心网友

#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;
}

热心网友

先定义一个全局的文件 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))是将指针左移并判断指向的地址是否有数据,如果有数据就继续操作,直到没有数据后退出循环,循环里的代码是先申请一个结构的空间,将数据读到这个这个结构变量里,然后再将这个变量插入到结构链表里,如此循环将所有数据读取插入链表就完成了文件的读取操作

热心网友

看一下C语言的基本文件操作吧。。建议使用fwrite(),遍历链表的时候写入就OK。打开文件和这个相反,先看下基础吧。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com