C语言实现n位整数各位数字分离无需二次输入的优化方案求解
原错误代码的核心问题
- 赋值时序错误:你在调用
scanf读取用户输入给entry之前,就执行了input1 = entry,此时entry是未初始化的随机值,input1根本没有拿到用户输入的有效数字,后续while (input1 > 0)的条件自然不成立,循环完全不会执行。 - 原始输入被修改:计算位数的for循环直接修改了
entry变量本身,哪怕你后续再想把entry赋值给input1,也已经找不到用户输入的原始数值了。 - 额外边界问题:计算位数的循环条件
entry > 1存在逻辑漏洞,比如用户输入1位的数字9时,代码会错误计算为2位,需要修正判断条件。
无需二次输入的修正方案
只需要调整执行顺序,新增临时变量保存原始输入值即可,修正后完整代码如下:
#include <stdio.h> #include <math.h> int main() { int entry, j, input1, temp; j = 1; printf("Enter the n digit number:\n"); scanf("%d", &entry); // 保存原始输入值,同时拷贝临时变量用于计算位数 input1 = entry; temp = entry; // 修正位数计算的判断条件 for (j = 1; temp >= 10; j++) { temp = temp / 10; } printf("The number is %d digit number\n", j); int t, i; i = 1; while (input1 > 0) { t = input1 / (int)pow(10, j - i); input1 = input1 % (int)pow(10,j - i); printf("%d ", t); i++; } return 0; }
内容的提问来源于stack exchange,提问作者magic reborn
相关产品推荐
相关产品推荐

