C语言用指针统计字符时多输出一行且首字符丢失问题
问题原因
- 首字符丢失:
main函数中先执行了scanf("%c", str);,这行代码会读取输入的第一个字符存入str[0],后续调用fgets(str, 100, stdin)时会直接覆盖str数组,从输入缓冲区剩余的内容开始读取,自然丢失了第一个字符。 - 多余换行:
fgets读取用户输入时,会将输入结束时按下的换行符\n一同存入字符串数组,输出%s时会带出这个换行,同时计数也会将该换行算入统计。 - 冗余逻辑:
countCharacter的p、Count参数完全冗余,函数内部已经重新赋值了p,Count也可以直接在函数内初始化,不需要从外部传入。
修复方案
- 删掉冗余的
scanf("%c", str);语句,仅保留fgets读取整行输入 - 遍历字符串计数时,遇到
\n或\0都终止遍历,同时将\n替换为\0避免输出多余换行 - 调整计数逻辑,不需要额外减1
修复后完整代码:
#include <stdio.h> void countCharacter(char str[]) { char *p = str; int count = 0; while(*p != '\0' && *p != '\n') { count++; p++; } // 把换行替换为结束符,避免输出多余换行 if (*p == '\n') { *p = '\0'; } printf("The string, %s, has %d characters.\n", str, count); } int main() { char str[100]; printf("Enter any string: \n"); fgets(str, 100, stdin); countCharacter(str); return 0; }
内容的提问来源于stack exchange,提问作者TonsilStone
相关产品推荐
相关产品推荐

