如何修复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
相关产品推荐
相关产品推荐

