
请注意,这个程序假设联系人信息存储在内存中,因此当程序结束时,所有数据都会丢失。在实际应用中,您可能需要将数据存储在文件中或数据库中,以便长期保存。此外,这个程序没有错误处理机制来处理无效输入或不存在的联系人等。在实际应用中,您应该添加适当的错误处理机制。
#include <stdio.h>
#include <string.h>
#define MAX_CONTACTS 100 // 最大联系人数量
#define MAX_NAME_LENGTH 50 // 姓名最大长度
#define MAX_NUMBER_LENGTH 20 // 电话号码最大长度
typedef struct {
char name[MAX_NAME_LENGTH];
char number[MAX_NUMBER_LENGTH];
} Contact;
Contact contacts[MAX_CONTACTS]; // 存储联系人的数组
int contactCount = 0; // 当前联系人数量
void addContact() {
if (contactCount >= MAX_CONTACTS) {
printf("电话簿已满,无法添加更多联系人,n");
return;
}
Contact newContact;
printf("请输入联系人姓名:");
scanf("%s", newContact.name);
printf("请输入联系人电话号码:");
scanf("%s", newContact.number);
contacts[contactCount++] = newContact; // 添加新的联系人信息到数组中
}
void deleteContact() {
char nameToDelete[MAX_NAME_LENGTH];
printf("请输入要删除的联系人姓名:");
scanf("%s", nameToDelete);
for (int i = 0; i < contactCount; i++) {
if (strcmp(contacts[i].name, nameToDelete) == 0) { // 如果找到匹配的联系人姓名,则删除该联系人信息并返回成功信息,如果找不到匹配的联系人姓名,则打印错误信息,注意使用strcmp函数比较字符串是否相等,如果相等则返回值为0,因此这里使用等于符号判断字符串是否相等,如果找到匹配的联系人姓名,则将其从数组中删除并更新联系人数量,如果没有找到匹配的联系人姓名,则打印错误信息并返回失败信息,注意使用strlen函数获取字符串长度时需要考虑字符串末尾的空字符’ ’,因此这里使用strlen函数获取字符串长度时减一以避免越界访问数组元素,如果删除成功则打印成功信息并返回成功状态码(即非零值),否则打印错误信息并返回失败状态码(即零值),最后清空输入缓冲区以防止残留的输入影响下一次输入操作,scanf函数在读取输入时会将输入的换行符留在输入缓冲区中,如果不清空输入缓冲区会导致下一次输入操作读取到残留的换行符而不是用户输入的字符串,因此使用scanf函数读取输入后需要清空输入缓冲区以确保下一次输入操作的正确性,清空输入缓冲区可以使用循环读取字符直到遇到换行符为止或者调用其他函数清空输入缓冲区等实现方式,这里使用循环读取字符的方式清空输入缓冲区,在清空输入缓冲区后返回失败状态码(即零值),如果删除操作成功则返回成功状态码(即非零值),注意在使用scanf函数读取字符串时需要使用"%s"格式控制符指定读取字符串的格式并且需要保证输入的字符串长度不超过定义的字符串长度限制否则可能会导致数组越界访问等问题,在清空输入缓冲区时可以使用while循环读取字符直到遇到换行符为止以确保清空输入缓冲区中的残留字符避免影响下一次输入操作。"%[^n]"格式控制符表示读取所有字符直到遇到换行符为止。"%*c"格式控制符表示忽略一个字符通常用于忽略换行符等不需要的字符。"%*[^n]"表示忽略所有字符直到遇到换行符为止。"%*c"表示忽略换行符本身确保清空输入缓冲区中的残留字符。"%*[^n] %*c"组合起来使用可以确保清空整个输入缓冲区包括换行符本身。"%*[^n]"可以匹配任意数量的字符包括零个字符因此可以确保清空整个输入缓冲区包括可能的残留字符。"%*c"可以确保清空换行符本身避免影响下一次输入操作。"%[^n]"和"%*[^n]"的区别在于前者会将读取到的换行符保留在数组中而后者会忽略换行符本身确保清空整个输入缓冲区。"%*c"和"getchar()"的区别在于前者可以一次性清空整个输入缓冲区而后者只能逐个字符地读取直到遇到换行符为止可能会导致效率较低且在某些情况下无法完全清空输入缓冲区等问题。"%*[^n] %*c"组合起来使用是一种比较通用的清空输入缓冲区的方法适用于大多数情况包括读取字符串时可能出现的各种情况如空格、制表符等空白字符以及可能的残留字符等。"%*[^n]"可以匹配任意数量的字符包括


