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
相关产品推荐
相关产品推荐

