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

C语言用指针统计字符时多输出一行且首字符丢失问题

问题原因
  • 首字符丢失:main函数中先执行了scanf("%c", str);,这行代码会读取输入的第一个字符存入str[0],后续调用fgets(str, 100, stdin)时会直接覆盖str数组,从输入缓冲区剩余的内容开始读取,自然丢失了第一个字符。
  • 多余换行:fgets读取用户输入时,会将输入结束时按下的换行符\n一同存入字符串数组,输出%s时会带出这个换行,同时计数也会将该换行算入统计。
  • 冗余逻辑:countCharacter的p、Count参数完全冗余,函数内部已经重新赋值了p,Count也可以直接在函数内初始化,不需要从外部传入。
修复方案
  1. 删掉冗余的scanf("%c", str);语句,仅保留fgets读取整行输入
  2. 遍历字符串计数时,遇到\n或\0都终止遍历,同时将\n替换为\0避免输出多余换行
  3. 调整计数逻辑,不需要额外减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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:03