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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:02