基于C语言开发通讯录(复习C语言知识点)(中)_zhangwenchao911的博客-CSDN博客
紧接C语言开发通讯录(中),实现 文件读写功能。
一、通讯录新增功能
1.1 文件-读功能
a)通过fopen(“文件名”,"r")进行文件-读方式打开;
b) 通过fgets(buff,pf)将每行数据读取到buff
c) 通过sscanf(buff,"%s %d %s %s %s",PeoInfo成员) 将buff中的数据格式化输入到结构体成员中。
d)close(fp),关闭文件
1.2文件-写功能
a)通过fopen(“文件名”,"w")进行文件-写方式打开;
b) 通过sprinft(buff,"%s %d %s %s %s",PeoInfo成员) 将结构体成员数据格式化输出到buff中。
c) 通过fputs(buff,pf)将buff数据存入到文件里。
d)close(fp),关闭文件
二、代码实现
2.1函数代码
实现文件读写功能的添加,完成contact.c中InitContact的修改与SaveContact函数的添加。
//void InitContact(Contact* pc)
//{
// assert(pc != NULL);
// //PeoInfo* tmp = (PeoInfo*)calloc(pc->Capacity,sizeof(PeoInfo));
// PeoInfo* tmp = (PeoInfo*)malloc(sizeof(PeoInfo) * INIT_CAPACITY);
// if (tmp == NULL)
// {
// perror("InitContact::malloc");
// }
// else
// {
// pc->Capacity = INIT_CAPACITY;
// pc->data = tmp;
// pc->sz = 0;
// printf("初始化成功\n");
// }
//}
//V1.2 从文件中读取通讯录信息进行初始化
void InitContact(Contact* pc)
{
assert(pc != NULL);
//PeoInfo* tmp = (PeoInfo*)calloc(pc->Capacity,sizeof(PeoInfo));
PeoInfo* tmp = (PeoInfo*)malloc(sizeof(PeoInfo) * INIT_CAPACITY);
if (tmp == NULL)
{
perror("InitContact::malloc");
}
else
{
pc->Capacity = INIT_CAPACITY;
pc->data = tmp;
pc->sz = 0;
printf("初始化成功\n");
}
FILE* pf = fopen("contact.txt", "r");
if (pf!=NULL)
{
char buff[256] = "";
int i = 0;
while (fgets(buff,255,pf)!=NULL)
{
CheckCapacity(pc);
sscanf(buff, "%s %d %s %s %s\n", pc->data[i].name,&(pc->data[i].age), pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
pc->sz++;
i++;
}
fclose(pf);
}
else
{
perror("读取配置失败\nInitContact::open");
}
}
void SaveContact(Contact* pc)
{
FILE* pf = fopen("contact.txt","w");
if (pf == NULL)
{
perror("SaveContact::open");
}
else
{
char buff[255] = "";
int i = 0;
for (i = 0; i < pc->sz; i++)
{
sprintf(buff, "%s %d %s %s %s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
fputs(buff, pf);
}
fclose(pf);
}
}
2.2总结
实现了文件的读写功能,基于C语言的通讯录功能已全部实现。