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语言链表与文件存取内容请搜索编程宝库以前的文章,希望以后支持编程宝库

经过多方调查,用Qt实现气泡聊天窗口的方式有如下几个:使用QWebEngineView控件内嵌html+CSS使用QTextEdit内嵌html使用QGraphicsView实现使用 ...