C语言通讯录实现按首字母搜索联系人无法获取姓名首字母问题
C语言通讯录首字母搜索功能修复方案
现存问题说明
你当前代码的错误集中在三点:
strcmp函数使用错误:strcmp要求传入两个字符串指针(char *类型),你传入的c[i]->name[0]是单个字符类型,类型不匹配会直接导致程序崩溃- 主函数
switch分支缺少选项6的处理逻辑,功能写完也无法触发调用 - 没有处理大小写匹配问题:用户输入小写a和大写A应该都能匹配到对应姓名,当前逻辑没有做兼容
修复步骤
- 新增头文件引用(用于大小写转换):
#include <ctype.h>
- 替换
SearchContactByFirstLetter函数为以下实现:
void SearchContactByFirstLetter(ContactBook **c, int quant) { int i; char input; printf("\n 输入要搜索的首字母:\n"); scanf("%c", &input); getchar(); // 统一转小写,实现大小写不敏感匹配 char target = tolower(input); for (i = 0; i < quant; i++) { // 跳过空姓名的异常数据 if (strlen(c[i]->name) == 0) continue; // 直接比较两个小写字符即可 if (tolower(c[i]->name[0]) == target) { printf("\t\n姓名: %s, \n电话: %s, \n生日: %d \n生日月份: %d \t\n", c[i]->name, c[i]->number, c[i]->bd, c[i]->bdm); } } }
- 在主函数的
switch分支中新增选项6的处理逻辑:
case 6: SearchContactByFirstLetter(contacts, quant); break;
功能验证
修改完成后重新编译运行,选择菜单第6项,输入任意字母即可展示所有姓名以该字母开头的联系人,大小写输入都可以正常匹配。
内容的提问来源于stack exchange,提问作者Heitor Kenzou
相关产品推荐
相关产品推荐

