用c语言写一段通讯录的代码
时间: 2024-09-28 07:09:28 浏览: 26
在C语言中,我们可以创建一个简单的通讯录程序,它包含一个结构体存储联系人信息,以及一些函数用于添加、删除和查找联系人。下面是一个基本的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义联系人结构体
typedef struct {
char name[50];
char phone_number[20];
} Contact;
// 函数声明
void add_contact(Contact *contacts, int *size);
void remove_contact(Contact *contacts, int size, int index);
void search_contact(Contact *contacts, int size, const char *name);
int main() {
Contact *contacts = NULL; // 初始化联系人数组
int size = 0; // 存储联系人的大小
int choice = 0;
// 动态分配内存,直到用户选择退出
while (choice != -1) {
printf("\n1. 添加联系人\n2. 查找联系人\n3. 删除联系人\n4. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_contact(contacts, &size);
break;
case 2:
char name[50];
printf("请输入名字搜索:");
scanf("%s", name);
search_contact(contacts, size, name);
break;
case 3:
int index;
printf("请输入要删除的联系人索引:");
scanf("%d", &index);
remove_contact(contacts, size, index);
break;
case 4:
free(contacts); // 释放内存
contacts = NULL;
size = 0;
printf("已退出通讯录。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
}
}
return 0;
}
// 添加联系人
void add_contact(Contact *contacts, int *size) {
if (*size == 0) {
contacts = (Contact *)malloc(sizeof(Contact));
} else {
contacts = (Contact *)realloc(contacts, (*size + 1) * sizeof(Contact));
}
contacts[*size].name = malloc(strlen("New Contact") + 1); // 假设新联系人名字为"New Contact"
contacts[*size].phone_number = malloc(strlen("1234567890") + 1);
printf("请输入联系人姓名:");
fgets(contacts[*size].name, sizeof(contacts[*size].name), stdin);
getchar(); // 消耗换行符
printf("请输入电话号码:");
fgets(contacts[*size].phone_number, sizeof(contacts[*size].phone_number), stdin);
getchar();
(*size)++;
}
// 删除联系人
void remove_contact(Contact *contacts, int size, int index) {
if (index >= 0 && index < size) {
free(contacts[index].name);
free(contacts[index].phone_number);
memmove(&contacts[index], &contacts[index + 1], (size - index - 1) * sizeof(Contact));
size--;
} else {
printf("索引无效,请重新输入。\n");
}
}
// 查找联系人
void search_contact(Contact *contacts, int size, const char *name) {
for (int i = 0; i < size; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("找到联系人 %s 的电话号码:%s\n", contacts[i].name, contacts[i].phone_number);
break;
}
}
}
```
这个示例包含了基本的添加、查找和删除功能。注意实际应用中需要处理各种错误情况,例如内存分配失败等。
阅读全文