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

C语言实现统计数字位数功能的代码运行无输出如何解决?

问题排查与修复方案

核心错误点

  • printf参数传递错误
    %d格式符要求传入int类型的实际值,你写的&counter是取counter的内存地址,属于指针类型,格式不匹配触发未定义行为,是导致无输出、输出乱码的直接原因。
  • 边界场景遗漏
    当输入数字为0时,while (number!=0)的判断会直接跳过循环,最终返回位数为0,不符合0是1位数的实际逻辑。

修正后基础代码

#include <stdio.h>

int main(){
    int number,counter=0;
    scanf("%d",&number);
    // 单独处理输入为0的场景
    if(number == 0){
        counter = 1;
    }else{
        while (number!=0){
            number = number / 10;
            counter++;
        }
    }
    // 移除counter前的取地址符&
    printf("the number has %d digits", counter);
    return 0;
}

可选优化(兼容负数输入)

如果需要支持负数输入(负号不计入位数统计),可以添加取绝对值的逻辑,引入stdlib.h头文件即可:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int number,counter=0;
    scanf("%d",&number);
    number = abs(number); // 转换为正数后再统计位数
    if(number == 0){
        counter = 1;
    }else{
        while (number!=0){
            number = number / 10;
            counter++;
        }
    }
    printf("the number has %d digits", counter);
    return 0;
}

内容的提问来源于stack exchange,提问作者Erfan Salima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:01