如何获取整数的最大与最小数字?现有C语言代码无输出求排查
问题排查与修复方案
你的代码之所以没有任何输出,核心原因是陷入了死循环,再加上变量i没有正确更新,导致程序永远执行不到最后的打印语句。下面具体拆解问题,再给你修复后的完整代码:
核心问题分析
- 死循环陷阱:你的while循环条件是
n >= 0,当输入正整数后(比如123),n会依次变成12、1、0,此时n/10的结果还是0,循环条件0 >= 0依然成立,程序会一直卡在循环里,永远到不了后面的printf。 - i变量未更新:你初始化了
i=1,但整个循环过程中没有对i做递增操作,所以i永远等于1,else分支永远不会执行,只能处理第一个数字,后面的数位根本没参与比较。
修复后的代码
#include<stdio.h> int main(){ int n, max, min; printf("Give me a positive integer: "); scanf("%d", &n); // 先初始化max和min为数字的最后一位 max = n % 10; min = n % 10; // 去掉最后一位,准备处理剩余数位 n = n / 10; // 循环条件改为n > 0,n为0时说明所有数位处理完毕 while(n > 0){ int current_digit = n % 10; if(current_digit < min){ min = current_digit; } if(current_digit > max){ max = current_digit; } n = n / 10; } printf("max. figure:%d min. figure:%d\n", max, min); return 0; }
修复说明
- 移除冗余变量:直接把max和min初始化为输入数字的最后一位,再去掉最后一位进入循环,避免了
i变量带来的逻辑混乱。 - 修正循环终止条件:用
n > 0作为循环条件,当n变为0时,所有数位都处理完成,循环会正常终止,程序能顺利执行到打印步骤。 - 提升代码可读性:把当前处理的数位存到
current_digit变量中,逻辑更直观,也不容易出错。
测试示例:输入4729,程序会输出max. figure:9 min. figure:2,完全符合需求。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

