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

如何在C语言中实现可识别正数前置0的数字位数计数器?

问题原因

当你用scanf("%d", &num)读取"05"这类带前导零的输入时,C语言会自动将其解析为整数5——整数类型本身不存储前导零的格式信息,所以后续通过整数除法统计位数的逻辑,自然只能得到1位结果,这是整数存储的特性决定的,无法通过整数运算解决。

解决方案

要统计包含前导零的数字位数,必须把输入当作字符串处理,这样才能完整保留输入的每一个字符信息。以下是两种实现方式:

方式一:严谨版(支持跳过空白、仅统计数字部分)

这种方式可以处理输入前后的空白字符,且只统计连续的数字序列长度:

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

int count_digits(const char *str)
{
    // 跳过开头的空白字符(如空格、换行)
    while (isspace((unsigned char)*str))
        str++;
    
    // 处理空输入或全空白的情况
    if (*str == '\0')
        return 0;
    
    // 统计连续数字字符的数量
    int count = 0;
    while (isdigit((unsigned char)*str))
    {
        count++;
        str++;
    }
    
    return count;
}

int main()
{
    char input[100];
    // 读取整行输入,确保捕获所有字符
    if (fgets(input, sizeof(input), stdin) != NULL)
    {
        printf("%d\n", count_digits(input));
    }
    return 0;
}

方式二:简易版(仅适用于纯数字输入)

如果能保证输入是纯数字(无空白、无其他字符),可以直接统计字符串长度:

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

int main()
{
    char input[100];
    if (fgets(input, sizeof(input), stdin) != NULL)
    {
        // 移除fgets读取到的换行符
        input[strcspn(input, "\n")] = '\0';
        // 直接输出字符串长度
        printf("%zu\n", strlen(input));
    }
    return 0;
}
关键说明

整数类型的本质是存储数值,而非数字的字符形式,因此无法保留前导零这类格式信息。只要需要统计包含前导零的位数,就必须以字符串形式处理输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28