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

如何获取整数的最大与最小数字?现有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;
}

修复说明

  1. 移除冗余变量:直接把max和min初始化为输入数字的最后一位,再去掉最后一位进入循环,避免了i变量带来的逻辑混乱。
  2. 修正循环终止条件:用n > 0作为循环条件,当n变为0时,所有数位都处理完成,循环会正常终止,程序能顺利执行到打印步骤。
  3. 提升代码可读性:把当前处理的数位存到current_digit变量中,逻辑更直观,也不容易出错。

测试示例:输入4729,程序会输出max. figure:9 min. figure:2,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:26:24