温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言怎么实现链表与文件存取

发布时间:2022-04-25 16:11:12 来源:亿速云 阅读:313 作者:iii 栏目:开发技术

今天小编给大家分享一下C语言怎么实现链表与文件存取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

此处为main函数的内容

int main(void) {     char filename[50];     printf("How many ?: ");     scanf("%d", &n);	/*输入学生数*/     printf("please input filename: ");     scanf("%s", filename);	/*输入文件所在路径及名称*/     Create();       //调用函数建立链表     save(filename); //调用函数存到文件     free(phead);//释放phead内存     show(filename); //调用函数输出文件     system("pause");     return 0; }

一、输入数据到链表中

建立链表并输入数据到链表里

代码如下:

typedef struct stu {     char name[20];     char adr[20];     int tel;     struct stu* pnext; } stu; int n;	//n存着信息条数 stu* phead=NULL;//phead为链表首地址   void Create()          //建立链表 {     stu *pend,*pnew;//尾节点,新节点     pend=phead =(stu*)malloc(sizeof(stu));//分配内存给首节点     printf("please first input Name, Adress and telephone:\n");     for(int i=0;i<n;i++)     {         pnew=(stu*)malloc(sizeof(stu));  //分配新节点         pend->pnext=pnew;   //原来的尾节点指向新节点         pnew->pnext=NULL;  	//新节点的指针为NULL         printf("NO.%d: ",i+1);         scanf("%s", pend->name);         scanf("%s", pend->adr);         scanf("%d",&pend->tel);         pend=pnew;  //赋值后指向尾节点     }     pnew=pnew->pnext;//指向NULL     free(pnew);      //释放pnew内存 }

二、把链表数据存入文件

此处用到了fopen、fprintf、fclose等文件操作函数

代码如下:

void save(char *filename) {     FILE *w;//文件指针     if ((w = fopen(filename, "wb")) == NULL){   /*二进制只写打开文件*/         printf("cannot open file\n");         exit(1);     }     for (int i = 0; i < n; i++)  //链表数据循环输入到文件内     {          fprintf(w,"%s ",phead->name);          fprintf(w,"%s ",phead->adr);          fprintf(w,"%d", phead->tel);          fprintf(w,"%s","\r\n");//换行          phead=phead->pnext;//指向下一个节点     }     fclose(w);	//关闭文件 }

三、输出文件

先把文件内容保存到结构体数组内,然后再通过数组输出到屏幕上。

代码如下:

void show(char *filename)	//输出文件 {     FILE *fp;//文件指针     stu info[100];  //负责存放文件中的数据,然后输出     if ((fp = fopen(filename, "rb")) == NULL){   /*二进制只读打开文件*/         printf("cannot open file\n");         exit(1);     }     for (int i = 0; i < n; i++)     {         fscanf(fp,"%s",&(info[i].name));//输出数据到数组         fscanf(fp,"%s",&(info[i].adr));         fscanf(fp,"%d",&(info[i].tel));         printf("%10s%15s%15d\n", info[i].name,         	info[i].adr, info[i].tel); //输出数据到屏幕     }     fclose(fp); //关闭文件 }

完整代码

/*此代码为《C语言从入门到精通(第二版)》第十四章(文件)的【例14.7】的改进版*/ #include<stdio.h> #include<stdlib.h> #include<process.h> typedef struct stu {     char name[20];     char adr[20];     int tel;     struct stu* pnext; } stu; int n;	//n存着信息条数 stu* phead=NULL;//phead为链表首地址   void Create()/*建立链表*/ {     stu *pend,*pnew;//尾节点,新节点     pend=phead =(stu*)malloc(sizeof(stu));//分配内存给首节点     printf("please first input Name, Adress and telephone:\n");     for (int i = 0; i < n; i++)     {         pnew=(stu*)malloc(sizeof(stu));  //分配新节点         pend->pnext=pnew;   //原来的尾节点指向新节点         pnew->pnext=NULL;   //新节点的指针为NULL         printf("NO.%d: ",i+1);         scanf("%s", pend->name);//输入数据存到链表中         scanf("%s", pend->adr);         scanf("%d",&pend->tel);         pend=pnew;  //赋值后指向尾节点     }     pnew=pnew->pnext;//指向NULL     free(pnew);      //释放pnew内存 } void save(char *filename)/*存到文件内*/ {     FILE *w;//文件指针     if ((w = fopen(filename, "wb")) == NULL){   /*二进制只写打开文件*/         printf("cannot open file\n");         exit(1);     }     for (int i = 0; i < n; i++)  //链表数据循环输入到文件里     {          fprintf(w,"%s ",phead->name);//数据存入到文件          fprintf(w,"%s ",phead->adr);          fprintf(w,"%d", phead->tel);          fprintf(w,"%s","\r\n");//换行          phead=phead->pnext;//指向下一个节点     }     fclose(w);	//关闭文件 } void show(char *filename)/*输出文件*/ {     FILE *fp;//文件指针     stu info[100];  //负责存放文件中的数据,然后输出     if ((fp = fopen(filename, "rb")) == NULL){   /*二进制只读打开文件*/         printf("cannot open file\n");         exit(1);     }     for (int i = 0; i < n; i++)     {         fscanf(fp,"%s",&(info[i].name));//输出数据到数组         fscanf(fp,"%s",&(info[i].adr));         fscanf(fp,"%d",&(info[i].tel));         printf("%10s%15s%15d\n", info[i].name,          	info[i].adr, info[i].tel);//输出数据到屏幕     }     fclose(fp);/*关闭文件*/ }   int main(void) {     char filename[50];     printf("How many ?:\n");     scanf("%d", &n);	/*输入学生数*/     printf("please input filename: ");     scanf("%s", filename); /*输入文件所在路径及名称*/     Create();       //调用函数建立链表     save(filename); //调用函数存到文件     free(phead);//释放phead内存     show(filename); //调用函数输出文件     system("pause");     return 0; }

以上就是“C语言怎么实现链表与文件存取”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI