You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言通讯录实现按首字母搜索联系人无法获取姓名首字母问题

C语言通讯录首字母搜索功能修复方案

现存问题说明

你当前代码的错误集中在三点:

  • strcmp 函数使用错误:strcmp 要求传入两个字符串指针(char *类型),你传入的 c[i]->name[0] 是单个字符类型,类型不匹配会直接导致程序崩溃
  • 主函数switch分支缺少选项6的处理逻辑,功能写完也无法触发调用
  • 没有处理大小写匹配问题:用户输入小写a和大写A应该都能匹配到对应姓名,当前逻辑没有做兼容

修复步骤

  1. 新增头文件引用(用于大小写转换):
#include <ctype.h>
  1. 替换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);
        }
    }
}
  1. 在主函数的switch分支中新增选项6的处理逻辑:
case 6:
    SearchContactByFirstLetter(contacts, quant);
    break;

功能验证

修改完成后重新编译运行,选择菜单第6项,输入任意字母即可展示所有姓名以该字母开头的联系人,大小写输入都可以正常匹配。

内容的提问来源于stack exchange,提问作者Heitor Kenzou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:27:03