1.任务
首先写入5个struct demo 结构体数据到文件(使用fw);然后通过打开文件(使用fr)读取五个数据;
注意:不能一次读多个结构体数据,否则会失败。
2.难点
怎么判断要读多少次呢?如果一开始就知道读五次,那就很轻松,但在假设不知道情况下怎么办?
3.思路
1. 首先打开文件,使用 fseek()函数找到文件开头到文件结尾的字节长度 offset;
2. 使用 sizeof(结构体)得到结构体大小
3. 需要读取的次数 n=offset/sizeof(结构体)
4. 重新使用 fseek() 把文件切换为开头
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct demo
{
char name[10];
struct demo * prev,*next;
}DEMO,*DEMOP;
#define DATA_LEN 5
int main()
{
//打开文档
FILE *fw=fopen("a.txt","w+");
//写入5个结构体数据,使用for
DEMO dataw[DATA_LEN];
memset(dataw,0,sizeof(DEMO)*DATA_LEN);
for(int i=0; i<5; i++)
{
printf("请输入第%d个数据:\n",i+1);
scanf("%s",dataw[i].name);
}
fwrite(dataw,sizeof(DEMO),5,fw);
fclose(fw);//关闭文档
//打开文档,读取5个数据,需要一个一个的读,否则会失败
DEMO datar[DATA_LEN];
FILE *fr=fopen("a.txt","r");
int offset=fseek(fr,0,SEEK_END);
int num= offset/sizeof(DEMO); //计算出需要读的次数
fseek(fw,0,SEEK_SET);
for(int i=0; i<5; i++)
{
fread(datar+i,sizeof(DEMO),1,fr);
}
for(int i=0; i<5; i++)
{
printf("%s\n",datar[i].name);
}
fclose(fr);
return 0;
}