这篇文章主要和大家分享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; //新节点的指针为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;
}我尝试过fread和fwrite的做法,但都失败了。
到此这篇关于C语言实现链表与文件存取的示例代码的文章就介绍到这了,更多相关C语言链表与文件存取内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C语言实现链表与文件存取的示例代码
猜你喜欢
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- Easyx实现扫雷游戏 2023-02-06
- Qt计时器使用方法详解 2023-05-30
- C语言qsort()函数的使用方法详解 2023-04-26
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言详解float类型在内存中的存储方式 2023-03-27
- C++ 数据结构超详细讲解顺序表 2023-03-25
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
