作者:柠檬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语言实现链表与文件的存取相关推荐

  1. C语言 | 单链表 | 统计文件中的各个单词的数量

    C语言实现从文件读取单词并且统计单词数 我是一个不喜欢写注释的Up 我是一个不喜欢写注释的Up #include <iostream> #include<io.h>using ...

  2. 火车票预订系统(C语言“动态链表”、“文件”实现)资深小白一枚,写的不好请见谅哦|ू・ω・` )

    设计要求 (1)建立车票信息库,每班车次有若干途径站,有若干票源,按照里程票价不同.//本人是按照三个中途站来编写的 (2)建立旅客信息库(乘车人的基本信息). (3)为二者建立乘车票务信息库(每位旅 ...

  3. 多项式合并同类项c语言链表,链表透过文件读写计算两个多项式之积

    当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积 链表透过文件读写计算两个多项式之积 www.myexceptions.net  网友分享于:2014-03-24  浏览:10次 ...

  4. 链表的c语言头文件,链表头文件C语言

    因为眼前有个例程要使用链表,索性写了一个链表,纯洁的链表其实写得很少.写了一次,感觉又是受益匪浅. /* linked_list.h -- 链表头文件 */ /* 数据类型定义 */ typedef ...

  5. c语言单链表输出26英文字母,C语言单链表的实现

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef st ...

  6. 【C/C++语言入门篇】-- 文件操作

    [C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...

  7. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  8. c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...

    怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...

  9. 计算机系统基础:文件的存取和存储空间管理知识笔记

    1.文件的存取 文件的存取实际上就是针对文件存储器上物理块的读写操作.存取方法主要有顺序存储.随机存储两种. 2.文件存储空间管理 磁盘分配表:外存空闲空间管理的数据结构. 2.1 空闲空间管理方法 ...

最新文章

  1. winform动态的文字效果
  2. java实现简易客户信息管理系统
  3. 网络营销过程中如何避免网站的过度优化情况的发生?
  4. cfa mock exam 2020下载_2019年6月CFA考试为什么一定要做MOCK?
  5. tensorflow 按维度相加_人工智能 TensorFlow 必知必会编程概念整理
  6. 大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
  7. 4.软件架构设计:大型网站技术架构与业务架构融合之道 --- 操作系统
  8. 20191007每日一句
  9. 生物信息学软件_高通量测序技术|生信的发展,常用数据格式及分析软件
  10. http保持状态的4种方法
  11. Javascript 版万年历
  12. JS 手机号/身份证/银行账号/邮箱/QQ/电话 掩码处理
  13. vss2005配置方法
  14. 计算机二级大题知识点汇总,计算机二级Excel考点与做题技巧汇总。
  15. 【数字经济】NBA+大数据,数字经济重塑体育帝国!
  16. Trajectory Forecasting:TrajNet++
  17. webp学习http://isux.tencent.com/introduction-of-webp.html
  18. SRCNN与FSRCNN
  19. html载入图片代码,HTML图片代码
  20. 干货|五分钟轻松入门眼动实验软件之Tobii Pro Lab

热门文章

  1. 公众号粉丝引流的八个方法
  2. 设置win10桌面、锁屏、密码输入界面背景色、图片
  3. android宫格式布局,Android 自定义TextView实现宫格布局,Drawable添加图片并控制宽高...
  4. 美团图神经网络训练框架的实践和探索
  5. Android 中获取指纹(SAH1)签名
  6. 开源图像和视频编辑软件汇总
  7. 实用Windows系统快捷键大全
  8. ORACLE之RAC搭建过程9-配置grid和oracle用户互信
  9. Effective C++读书摘要--Accustoming Youself to C++
  10. 解决ios设备自带邮箱只能接收邮件不能发送邮件问题的方法