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


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

此处为main函数的内容

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

一、输入数据到链表中

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

代码如下:

typedefstructstu{charname[20];charadr[20];inttel;structstu*pnext;}stu;intn;//n存着信息条数stu*phead=NULL;//phead为链表首地址voidCreate()//建立链表{stu*pend,*pnew;//尾节点,新节点pend=phead=(stu*)malloc(sizeof(stu));//分配内存给首节点printf("pleasefirstinputName,Adressandtelephone:\n");for(inti=0;i<n;i++){pnew=(stu*)malloc(sizeof(stu));//分配新节点pend->pnext=pnew;//原来的尾节点指向新节点pnew->pnext=NULL;//新节点的指针为NULLprintf("NO.%d:",i+1);scanf("%s",pend->name);scanf("%s",pend->adr);scanf("%d",&pend->tel);pend=pnew;//赋值后指向尾节点}pnew=pnew->pnext;//指向NULLfree(pnew);//释放pnew内存}

二、把链表数据存入文件

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

代码如下:

voidsave(char*filename){FILE*w;//文件指针if((w=fopen(filename,"wb"))==NULL){/*二进制只写打开文件*/printf("cannotopenfile\n");exit(1);}for(inti=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);//关闭文件}

三、输出文件

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

代码如下:

voidshow(char*filename)//输出文件{FILE*fp;//文件指针stuinfo[100];//负责存放文件中的数据,然后输出if((fp=fopen(filename,"rb"))==NULL){/*二进制只读打开文件*/printf("cannotopenfile\n");exit(1);}for(inti=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>typedefstructstu{charname[20];charadr[20];inttel;structstu*pnext;}stu;intn;//n存着信息条数stu*phead=NULL;//phead为链表首地址voidCreate()/*建立链表*/{stu*pend,*pnew;//尾节点,新节点pend=phead=(stu*)malloc(sizeof(stu));//分配内存给首节点printf("pleasefirstinputName,Adressandtelephone:\n");for(inti=0;i<n;i++){pnew=(stu*)malloc(sizeof(stu));//分配新节点pend->pnext=pnew;//原来的尾节点指向新节点pnew->pnext=NULL;//新节点的指针为NULLprintf("NO.%d:",i+1);scanf("%s",pend->name);//输入数据存到链表中scanf("%s",pend->adr);scanf("%d",&pend->tel);pend=pnew;//赋值后指向尾节点}pnew=pnew->pnext;//指向NULLfree(pnew);//释放pnew内存}voidsave(char*filename)/*存到文件内*/{FILE*w;//文件指针if((w=fopen(filename,"wb"))==NULL){/*二进制只写打开文件*/printf("cannotopenfile\n");exit(1);}for(inti=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);//关闭文件}voidshow(char*filename)/*输出文件*/{FILE*fp;//文件指针stuinfo[100];//负责存放文件中的数据,然后输出if((fp=fopen(filename,"rb"))==NULL){/*二进制只读打开文件*/printf("cannotopenfile\n");exit(1);}for(inti=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);/*关闭文件*/}intmain(void){charfilename[50];printf("Howmany?:\n");scanf("%d",&n);/*输入学生数*/printf("pleaseinputfilename:");scanf("%s",filename);/*输入文件所在路径及名称*/Create();//调用函数建立链表save(filename);//调用函数存到文件free(phead);//释放phead内存show(filename);//调用函数输出文件system("pause");return0;}

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


上一篇:vue中不同情况下如何进行通讯

下一篇:使用Vant框架list组件遇到的坑怎么解决


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器