通讯录的最新版本来啦,请注意查收~~~
在手机中的通讯录,与我们之前的两个通讯录版本相比,最大的区别是每次关掉程序或者关机重启,联系人的信息不会像在内存中的程序一样丢失,而是保存在了本地的硬盘里,这一次,我们就使用C语言中的文件功能对通讯录进行改进。
总结一下,需要完成的功能为:在退出时保存信息到文件;打开时加载文件中的信息到程序。
目录
一、代码优化
1.退出时保存信息
我们创建SaveContact函数用来将信息保存至文件中,将这个函数放在switch语句中的case选项下,先存放到文件中,再销毁程序中的通讯录。
// test.c
...
case EXIT:
SaveContact(&contact);
DestoryContact(&contact);
break;
...
(1)创建函数
首先需要先打开文件,采用写入的方式,我们定义FILE类型指针,指向使用fopen打开的文件,并判断文件指针是否为空,即是否打开文件失败,失败就提示错误信息并退出函数。
(2)保存信息
当打开文件成功后,就可以进行写入了,我们使用for循环进行逐个写入,使用fwrite写入文件,信息源为联系人列表,每次写入一个联系人信息所占的字节数,每次写入一个联系人信息,写入文件指针类型所指向的文件中。
(3)关闭文件
最后就是关闭文件了,使用fclose关闭文件,并将指针置空。
每次使用文件指针后切记要关闭文件,并将指针置空,防止内存访问异常!
函数代码如下:
// contact.c
void SaveContact(Contact* pc)
{
// 打开文件
FILE* pf = fopen("contact.dat", "w");
if (pf == NULL)
{
perror("fopen");
return;
}
// 写文件
int i = 0;
for (i = 0; i < pc->sz; i++)
{
// 要写入的信息来源为联系人列表;每次写入一个联系人的信息大小;
// 每次写入一个联系人信息;写入pf所指向的文件中
fwrite(pc->data+i, sizeof(PeoInfo), 1,pf);
}
// 关闭文件
fclose(pf);
pf = NULL;
}
2.打开程序时加载文件中的信息
加载文件就是指读取文件中的内容到程序中,我们创建LoadContact函数用来读取文件中的信息。
需要注意的是,我们应该在程序初始化时读取文件的内容,而不是到用户选择功能时再进行读取。将读取文件的函数放在初始化函数中。
// contact.c
void InitContact(Contact* pc)
{
...
LoadContact(pc);
}
(1)创建读取函数
a.读取文件
使用FILE类型指针指向使用fopen打开存放信息的文件"contact.dat",需要注意的是,这里应当使用"r"对文件进行读取。要记得进行判断是否打开成功~

本文介绍了使用C语言实现通讯录系统,重点在于如何在退出时保存信息到文件以及启动时从文件加载信息。通过创建SaveContact和LoadContact函数,实现了文件的读写操作。在SaveContact函数中,打开文件、写入联系人信息并关闭文件;在LoadContact函数中,读取文件内容、检查容量并存储到程序的通讯录中。
最低0.47元/天 解锁文章
3324

被折叠的 条评论
为什么被折叠?



