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

C程序使用scanf("%s")、strlen统计字符不计数空格的问题求助

问题原因

你的代码运行结果不符合预期主要有两个核心原因:

  1. 输入函数逻辑限制:scanf("%s", name) 读取输入时遇到空格、制表符、换行符就会自动停止,所以输入John Snow时,仅读取到空格前的John就终止了,数组里只存了4个字符,自然统计结果不对。
  2. 语法错误:原代码存在多处语法问题,包括int counter=0末尾漏分号、for循环未闭合右大括号、最终打印计数的语句漏分号,也会导致编译或运行异常。另外原代码中scanf("%s",&name)里的&是多余的,数组名本身就代表数组首地址,不需要额外取地址。
入门级解决方案

不需要使用内存操作相关函数,只要将输入函数替换为可以读取整行内容的fgets()即可,该函数可以读取包含空格的输入,且自带缓冲区长度限制,适合入门使用。
修正后的完整代码如下:

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

int main() {
    char name[100];
    int counter = 0;
    printf("Enter name and surname:");
    // fgets参数说明:存储数组、最大读取长度、输入流(stdin代表键盘输入)
    fgets(name, sizeof(name), stdin);
    
    int len = strlen(name);
    // 可选操作:去掉fgets读取到的末尾换行符,避免统计多余的换行
    if (len > 0 && name[len - 1] == '\n') {
        name[len - 1] = '\0';
        len--;
    }

    for(int i = 0; i < len; i++){
        printf("%c \n", name[i]);
        counter++;
    }
    printf("总字符数:%d", counter);
    return 0;
}

输入John Snow测试时,会依次打印每个字符包括中间的空格,最终统计结果为10,符合你的预期。

内容的提问来源于stack exchange,提问作者D. K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:09:00