C语言实现链表与文件的存取
作者:柠檬i,学习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; //新节点的指针为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等文件操作函数
代码如下:
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; //新节点的指针为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内存
}
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;
}
我尝试过fread和fwrite的做法,但都失败了。
参考文章:
c语言链表数据存入文件和读取文件
C语言实现链表与文件的存取相关推荐
- C语言 | 单链表 | 统计文件中的各个单词的数量
C语言实现从文件读取单词并且统计单词数 我是一个不喜欢写注释的Up 我是一个不喜欢写注释的Up #include <iostream> #include<io.h>using ...
- 火车票预订系统(C语言“动态链表”、“文件”实现)资深小白一枚,写的不好请见谅哦|ू・ω・` )
设计要求 (1)建立车票信息库,每班车次有若干途径站,有若干票源,按照里程票价不同.//本人是按照三个中途站来编写的 (2)建立旅客信息库(乘车人的基本信息). (3)为二者建立乘车票务信息库(每位旅 ...
- 多项式合并同类项c语言链表,链表透过文件读写计算两个多项式之积
当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积 链表透过文件读写计算两个多项式之积 www.myexceptions.net 网友分享于:2014-03-24 浏览:10次 ...
- 链表的c语言头文件,链表头文件C语言
因为眼前有个例程要使用链表,索性写了一个链表,纯洁的链表其实写得很少.写了一次,感觉又是受益匪浅. /* linked_list.h -- 链表头文件 */ /* 数据类型定义 */ typedef ...
- c语言单链表输出26英文字母,C语言单链表的实现
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef st ...
- 【C/C++语言入门篇】-- 文件操作
[C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...
怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...
- 计算机系统基础:文件的存取和存储空间管理知识笔记
1.文件的存取 文件的存取实际上就是针对文件存储器上物理块的读写操作.存取方法主要有顺序存储.随机存储两种. 2.文件存储空间管理 磁盘分配表:外存空闲空间管理的数据结构. 2.1 空闲空间管理方法 ...
最新文章
- winform动态的文字效果
- java实现简易客户信息管理系统
- 网络营销过程中如何避免网站的过度优化情况的发生?
- cfa mock exam 2020下载_2019年6月CFA考试为什么一定要做MOCK?
- tensorflow 按维度相加_人工智能 TensorFlow 必知必会编程概念整理
- 大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
- 4.软件架构设计:大型网站技术架构与业务架构融合之道 --- 操作系统
- 20191007每日一句
- 生物信息学软件_高通量测序技术|生信的发展,常用数据格式及分析软件
- http保持状态的4种方法
- Javascript 版万年历
- JS 手机号/身份证/银行账号/邮箱/QQ/电话 掩码处理
- vss2005配置方法
- 计算机二级大题知识点汇总,计算机二级Excel考点与做题技巧汇总。
- 【数字经济】NBA+大数据,数字经济重塑体育帝国!
- Trajectory Forecasting:TrajNet++
- webp学习http://isux.tencent.com/introduction-of-webp.html
- SRCNN与FSRCNN
- html载入图片代码,HTML图片代码
- 干货|五分钟轻松入门眼动实验软件之Tobii Pro Lab
热门文章
- 公众号粉丝引流的八个方法
- 设置win10桌面、锁屏、密码输入界面背景色、图片
- android宫格式布局,Android 自定义TextView实现宫格布局,Drawable添加图片并控制宽高...
- 美团图神经网络训练框架的实践和探索
- Android 中获取指纹(SAH1)签名
- 开源图像和视频编辑软件汇总
- 实用Windows系统快捷键大全
- ORACLE之RAC搭建过程9-配置grid和oracle用户互信
- Effective C++读书摘要--Accustoming Youself to C++
- 解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法