C语言实现通讯录(文件版)实现数据可以保存到文件,也可以从文件中加载数据

我们只需要完成两个函数的添加就可以

1. 添加一个函数,在退出通讯录的时候把信息到保存到文件中

2. 添加一个函数,在通讯录打开的时候,可以把文件中的信息加载到通讯录中

 

 

void Save(struct Contact* pc)
{
	//打开文件
	FILE* pf = fopen("data.txt","wb");//wb是以二进制形式写入文件
    //判断是否打开成功
	if (pf==NULL)
	{
		perror("Save::fopen");
		return;
	}
	//写文件
	int i = 0;
	for (i = 0; i < pc->sz;i++)
	{
		fwrite(pc->data + i, sizeof(struct PeoInfo),1,pf);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
}

 

第一个参数: 指向要写入的元素数组的指针,转换为常量

第二个参数:要写入的每个元素的大小(以字节为单位)

第三个参数:每次写入的元素个数

第四个参数:指向指定输出流的 FILE 对象的指针

 我们是以二进制形式写入和读的所以这里面的东西我们都看不懂,没关系,计算机看的懂就可以

接下来我们来写加载函数

void LoadContact(struct Contact* pc)
{
	//打开文件
	FILE* pfr = fopen("data.txt", "rb");
	if (pfr==NULL)
	{
		perror("LoadContact::fopen");
		return;
	}
	//读文件
	struct PeoInfo tmp = { 0 };
	while (fread(&tmp,sizeof(struct PeoInfo),1,pfr))
	{
		//要考虑增容问题,不增容只能显示三个
		check_capacity(pc);
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}
	//关闭文件
	fclose(pfr);
	pfr = NULL;
}

fread函数和fwrite非常相似自己去查一下就可以

我们创建一个结构体tmp,把信息读到tmp里,再把tmp赋给pc->data[pc->sz].

这样我们再次直接运行程序时数据就不会丢失

 

他会直接显示增容成功 。

有不懂的可以私信我,我们可以交流一下。

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值