已经把一个单向链表存入磁盘,现在如何读取呢?即如何从磁盘中读取一个链表文件
将链表文件写入磁盘的代码:#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Book)
int n=0;
struct Book
{
int num; //编号
char name[20]; //书名
char author[20]; //作者
char publishing[20]; //出版社
char type[20]; //类型
char date[20]; //出版日期
int salesvolum; //售价
int xiaoliang; //销量
struct Book *next;
};
int main()
{
void save();
printf("请输入书籍编号,书名,作者,出版社,类型,出版时间,售价,销量...\n");
save();
return 0;
}
struct Book *creat() //创建动态链表函数
{
struct Book *head;
struct Book *p1,*p2;
n=0;
p1=p2=(struct Book *)malloc(LEN);
scanf("%d%s%s%s%s%s%d%d",&p1->num,&p1->name,&p1->author,&p1->publishing,p1->type,&p1->date,&p1->salesvolum,&p1->xiaoliang); //读入图书的信息
head=NULL;
while(p1->num!=0) //当读入编号为0时就结束读入
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Book *)malloc(LEN);
scanf("%d%s%s%s%s%s%d%d",&p1->num,&p1->name,&p1->author,&p1->publishing,p1->type,&p1->date,&p1->salesvolum,&p1->xiaoliang);
}
p2->next=NULL;
}
void save()
{
struct Book *creat();
FILE *fp;
struct Book *pt;
pt=creat();
if(!(fp=fopen("bookceshi.dat","wb")))
{
printf("can not open this file!\n");
return;
}
while(pt!=NULL)
{
if(fwrite(pt,sizeof(struct Book),1,fp)!=1)
printf("file write error!\n");
pt=pt->next;
}
fclose(fp);
}
我读取的代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Book)
int n=0;
struct Book
{
int num; //编号
char name[20]; //书名
char author[20]; //作者
char publishing[20]; //出版社
char type[20]; //类型
char date[20]; //出版日期
int salesvolum; //售价
int xiaoliang; //销量
struct Book *next;
};
int main()
{
int i;
struct Book *head;
struct Book *p1,*p2;
FILE *fp;
if(!(fp=fopen("bookceshi.dat","rb")))
{
printf("can not open this file!\n");
exit(0);
}
p1=p2=(struct Book*)malloc(LEN);
head=NULL;
while(fread(p1,sizeof(struct Book),1,fp)==1)
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Book *)malloc(LEN);
}
p2->next=NULL;
for(;p1!=NULL;)
{
printf("%4d %-10s %-10s %-10s %-10s %-10s %d %d\n",p1->num,p1->name,p1->author,p1->publishing,p1->type,p1->date,p1->salesvolum,p1->xiaoliang);
p1=p1->next;
}
fclose(fp);
return 0;
}
请大神帮忙看看我的代码,为什么读取出来的文件是乱码
!