今天小编给大家分享一下C语言怎么实现链表与文件存取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
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语言怎么实现链表与文件存取”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。