1、编程实现通讯录的查找,通讯录信息保存在一个menu.txt文件中,内容包含信息如下 【姓名 性别 出生年月 地址 电话】 要求: 1)设计一个结构体类型,用于存储每条的信息。 2)根据从文件中读入的第一数据,采用结构体类型的动态内存分配,实现n个人的信息的存储。 3)从文件中依次读入n个用户的信息。 4)写一个函数,实现结构体类型数组的参数传递,把所有出生于2000年的通讯记录按照读入的倒叙输出到显示器上。
时间: 2024-02-10 17:10:31 浏览: 112
下面是一个通讯录查找的示例程序,实现了上述要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义通讯录的结构体类型
typedef struct {
char name[20];
char sex[5];
char birth[10];
char address[50];
char phone[15];
} Contact;
// 定义函数,用于读取通讯录信息并存储到动态数组中
Contact* readContacts(int* count) {
FILE* fp;
char firstLine[256];
Contact* contacts;
// 打开文件
fp = fopen("menu.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return NULL;
}
// 读取第一行数据,获取通讯录信息的数量
fgets(firstLine, sizeof(firstLine), fp);
sscanf(firstLine, "%d", count);
// 动态分配存储通讯录信息的数组
contacts = (Contact*)malloc(*count * sizeof(Contact));
if (contacts == NULL) {
printf("Failed to allocate memory\n");
fclose(fp);
return NULL;
}
// 依次读取每个通讯录的信息,并存储到数组中
for (int i = 0; i < *count; i++) {
fscanf(fp, "%s %s %s %s %s", contacts[i].name, contacts[i].sex, contacts[i].birth, contacts[i].address, contacts[i].phone);
}
// 关闭文件
fclose(fp);
return contacts;
}
// 定义函数,用于输出出生于2000年的通讯录信息
void printContacts(Contact* contacts, int count) {
for (int i = count - 1; i >= 0; i--) {
// 判断出生年份是否为2000年
if (strstr(contacts[i].birth, "2000") != NULL) {
// 输出该通讯录信息
printf("%s %s %s %s %s\n", contacts[i].name, contacts[i].sex, contacts[i].birth, contacts[i].address, contacts[i].phone);
}
}
}
int main() {
int count;
Contact* contacts;
// 读取通讯录信息并存储到动态数组中
contacts = readContacts(&count);
if (contacts == NULL) {
return 1;
}
// 输出出生于2000年的通讯录信息
printContacts(contacts, count);
// 释放动态数组的内存空间
free(contacts);
return 0;
}
```
该程序使用`Contact`结构体类型存储通讯录信息,使用`readContacts`函数从文件中读取通讯录信息并存储到动态数组中,使用`printContacts`函数输出出生于2000年的通讯录信息。在`main`函数中调用这两个函数完成程序的功能。注意,在使用完动态数组后,需要使用`free`函数释放内存空间。
阅读全文