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

输入数字转五进制代码中最后循环printf无输出问题求助

修复五进制转换代码中最后循环不执行的问题

你的代码核心问题是统计数字位数的循环已经把变量n清零了,导致最后转换五进制的for循环因为n > 0的条件不满足,完全不执行。

问题根源

不管是第一次输入还是后续重新输入数字,你都直接对原始变量n执行了while (n != 0) { n /= 10; count++; }操作——这个循环会持续将n除以10,直到n变为0。等你走到五进制转换的循环时,n已经是0,自然不会进入循环执行任何代码。

修复方案

  1. 用临时变量代替原始n进行位数统计,保留原始输入值用于后续转换
  2. 把重复的位数统计逻辑封装成函数,减少代码冗余

修复后的完整代码

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

#define MAX_NUM 6
#define MAX_ARR 20

// 封装位数统计函数,避免重复代码
int getDigitCount(unsigned long long num) {
    int count = 0;
    if (num == 0) return 1; // 处理输入0的情况
    while (num != 0) {
        num /= 10;
        count++;
    }
    return count;
}

int main()
{
    system("chcp 1251");
    printf("\n\n");
    unsigned long long n, temp; // 新增临时变量保存原始输入值
    int numArray[MAX_ARR];
    int count = 0, i;
    printf("Введіть довге ціле число: ");
    scanf_s("%llu", &n);
    
    temp = n; // 用临时变量统计位数,不修改原始n
    count = getDigitCount(temp);
    
    // 合并重复的输入校验逻辑
    while (count > MAX_NUM) {
        printf("\nЧисло занадто велике. Введіть число менше або рівне 6: ");
        scanf_s("%llu", &n);
        temp = n;
        count = getDigitCount(temp);
    }
    
    // 此时n仍为原始输入的有效值,可正常执行五进制转换
    printf("转换后的五进制数(逆序,需从后往前读):");
    for (i = 0; n > 0; i++)
    {
        numArray[i] = n % 5;
        n /= 5;
        printf(" %d ", numArray[i]);
    }
    // 单独处理输入0的情况
    if (i == 0) {
        printf(" 0 ");
    }
    return 0;
}

额外说明

  • 修复后的代码用temp变量负责统计位数,保留了原始n的值用于五进制转换
  • 新增的getDigitCount函数抽离了重复逻辑,让代码更简洁易维护
  • 补充了输入0的处理,避免极端情况无输出

内容的提问来源于stack exchange,提问作者Nikita Ivankov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:27