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中不同情况下如何进行通讯
winlogins.exe是什么文件?winlogins.exe是不是病毒
winsock2.6.exe是什么文件?winsock2.6.exe是不是病毒
WinDefendor.dll是什么文件?WinDefendor.dll是不是病毒
系统目录是什么文件?系统目录是不是病毒
wholove.exe是什么文件?wholove.exe是不是病毒
winn.ini是什么文件?winn.ini是不是病毒
w6oou.dll是什么文件?w6oou.dll是不是病毒
winduxzawb.exe是什么文件?winduxzawb.exe是不是病毒
wuammgr32.exe是什么文件?wuammgr32.exe是不是病毒
windiws.exe是什么文件?windiws.exe是不是病毒