把结构体链表保存到二进制文件中并读取
第一次发表文章,不足还请见谅
#include<stdio.h>
#include<stdlib.h>
#define max 20
int main(){
FILE *fp; //定义文件指针
char ch[max];
int s;
fp=fopen("C:\\Users\\ASUS\\Desktop\\二进制文件.data","ab+");
//以可读写形式打开文件,通过文件属性找到绝对路径,然后把'\'换成'\\'或者把'\'换成'/'
typedef struct data{ //定义结构体
int age;
char name[max];
struct data *next;
}link;
link *head,*node,*end,*L; //定义头节点,当前节点,尾节点,备用节点
head=(link*)malloc(sizeof(link)); //为头结点分配空间
end=head; //如果未给头结点分配空间,则end为NULL
if(head==NULL) //判断节点是否创建成功
{
printf("节点创建失败");
exit(1);
}
printf("请输入s的值,1.输入信息 0.停止输入\n");
scanf("%d",&s);
while(s){ //判断是否输入信息
node=(link*)malloc(sizeof(link)); //申请节点存储信息
printf("请输入年纪和名字\n");
scanf("%d",&node->age);
//对于结构体指针用node->age访问信息,对于结构体变量用 变量名.age访问
scanf("%s",node->name);
end->next=node; //将节点接到尾节点后面
end=node;
printf("请输入s的值,1.输入信息 0.停止输入\n");//是否继续输入信息
scanf("%d",&s);
}
end->next=NULL; //将尾节点的下一个节点赋值为NULL(空指针)
L=head; //将头结点赋值给L
while(L->next!=NULL){ //输出结构体链表信息
printf("%d %s\n",L->next->age,L->next->name);
L=L->next;
}
L=head;
while(L->next!=NULL){ //将结构体信息写入二进制文件
fwrite(L->next,sizeof(link),1,fp);
L=L->next;
printf("写入成功!");
}
rewind(fp); //将文件指针定位到文件头
while(!feof(fp)){ //输出二进制文件全部信息
fread(L,sizeof(link),1,fp);
printf("%d %s\n",L->age,L->name);
}
fclose(fp); //关闭文件
return 0;
}