目录此处为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); //关闭文件
}
#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语言链表与文件存取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C语言实现链表与文件存取的示例代码
本文链接: https://lsjlt.com/news/147281.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0