输入数字转五进制代码中最后循环printf无输出问题求助
修复五进制转换代码中最后循环不执行的问题
你的代码核心问题是统计数字位数的循环已经把变量n清零了,导致最后转换五进制的for循环因为n > 0的条件不满足,完全不执行。
问题根源
不管是第一次输入还是后续重新输入数字,你都直接对原始变量n执行了while (n != 0) { n /= 10; count++; }操作——这个循环会持续将n除以10,直到n变为0。等你走到五进制转换的循环时,n已经是0,自然不会进入循环执行任何代码。
修复方案
- 用临时变量代替原始
n进行位数统计,保留原始输入值用于后续转换 - 把重复的位数统计逻辑封装成函数,减少代码冗余
修复后的完整代码
#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
相关产品推荐
相关产品推荐

