今天小编给大家分享一下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语言怎么实现链表与文件存取”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。