为什么统计整数位数的C代码循环中用n%=10无法输出结果
问题原因分析
你这段代码无法正常输出i的值,是两个问题共同导致的:
- 变量
i未初始化
C语言的栈区局部变量不会默认初始化为0,你声明int i;后没有手动赋值,它的初始值是内存中的随机垃圾值,即便循环能正常结束,输出结果也必然错误。 n %= 10的逻辑触发死循环
取模运算符%的作用是计算两数相除的余数,比如你输入值为123时,第一次执行n %= 10后,n的值就会变成3,此后每次执行n %=10,n的值永远是3,始终满足n != 0的循环判断条件,程序会一直卡在while循环中,永远执行不到后续的printf语句,自然不会打印任何内容。
修正后的完整代码
除了你已知的把n %= 10替换为n /= 10(整除运算每次去掉最后一位,直到n变为0退出循环)之外,还要注意给计数器i初始化,同时额外处理输入为0的边界场景:
#include<stdio.h> int main() { int n; scanf("%d",&n); int i = 0; // 处理输入为0的特殊情况,0的位数为1 if(n == 0) { i = 1; } else { while(n != 0) { n /= 10; ++i; } } printf("%d",i); return 0; }
内容的提问来源于stack exchange,提问作者Muskan Tabassum
相关产品推荐
相关产品推荐

