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

如何修复C语言用指针统计姓名中指定字符出现次数的错误程序

正确实现代码

#include <stdio.h>
#include <string.h>

int main() {
    int n, i;
    // 最多支持30个姓名,每个姓名最长29字符
    char names[30][30];
    char search_ch;

    printf("how many names?\n");
    scanf("%d", &n);
    // 清空输入缓冲区残留的换行符
    getchar();

    // 第一步:先录入所有姓名
    for (i = 0; i < n; i++) {
        printf("please enter %dth name:\n", i + 1);
        fgets(names[i], 30, stdin);
        // 去掉fgets读取到的末尾换行符
        names[i][strcspn(names[i], "\n")] = '\0';
    }

    // 第二步:逐个查询每个姓名的字符出现次数
    for (i = 0; i < n; i++) {
        int count = 0;
        char *p = names[i];
        printf("Number of repetitions Which letter of the name %d do you want?\n", i + 1);
        search_ch = getchar();
        // 清空本次输入残留的换行符
        while (getchar() != '\n');

        // 用指针遍历字符串统计次数
        while (*p != '\0') {
            if (*p == search_ch) {
                count++;
            }
            p++;
        }
        printf("%d\n", count);
    }

    return 0;
}

实现说明

  • 输入处理上用fgets替代已被C标准废弃的gets,避免缓冲区溢出风险,同时每次读取后主动清理换行符和输入缓冲区残留,避免后续读取异常
  • 严格按照需求拆分执行逻辑:先循环完成所有姓名的录入,再单独循环逐个处理每个姓名的字符查询需求
  • 计数变量每次查询前重新初始化,不会出现计数累加错误
  • 完全用指针实现字符串遍历统计,符合要求的指针操作逻辑
  • 全部使用标准C库函数,没有平台兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:00