目录
前言
在退出通讯录之前
在运行通讯录之前
前言
在这篇博客中,实现了动态版本的通讯录,接下来会增加函数,能用文件存储通讯录中的联系人
C语言 ——— 在控制台实现通讯录(增删查改、动态开辟内存空间)-CSDN博客
在退出通讯录之前
代码演示:
//退出通讯录前,将联系人的信息保存到文件中
void SaveContact(Contact* con)
{
//wb - 以二进制的形式写入数据
FILE* pf = fopen("Contact.dat", "wb");
//判断pf指针是否创建成功
if (pf == NULL)
{
perror("SaveContact");
return;
}
//写入数据
for (int i = 0; i < con->sz; i++)
{
fwrite(con->date + i, sizeof(PeoInFo), 1, pf);
}
//关闭文件
fclose(pf);
pf = NULL;
}
代码验证:
在输入了联系人的信息后,查看当前代码目录:
因为存储的联系人的信息是以二进制的形式存储的,所以显示观看的时候是看不懂的
在运行通讯录之前
代码演示:
//初始化时将文件中保存的信息加载到程序中
void LoadContact(Contact* con)
{
//打开存储联系人信息的文件
//rb - 以二进制的信息读文件
FILE* pf = fopen("Contact.dat", "rb");
//判断pf指针是否创建成功
if (pf == NULL)
{
perror("LoadContact");
return;
}
//读文件
//先创建一个可以临时存放每一个联系人数据的结构体
PeoInFo tmp = { 0 };
//fread函数,读取到数据就返回1,没读取到数据返回0
while (fread(&tmp, sizeof(PeoInFo), 1, pf))
{
//如果文件中存放的数据大于初始化时的数据,就要增容,判断增容是否成功
if (CheckCapacity(con) == 0)
{
perror("CheckCapacity");
return;
}
con->date[con->sz] = tmp;
con->sz++;
}
//关闭文件
fclose(pf);
pf = NULL;
}
代码验证:
在上次退出通讯录前,已经存储了联系人的信息,所以运行通讯录时,直接打印所有联系人的信息,测试是否加载到了程序中:
可以看到,成功将联系人的信息加载到了程序中