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

输入不同但输出固定为38,求C语言求第二大数代码的问题排查

帮你排查C语言代码始终输出38的问题

嘿,我帮你揪出代码里的几个关键问题啦,这就是为啥不管输入啥都输出38的原因:

  • max2未初始化,赋值方向完全搞反
    你代码里写的是b = max2这种语句,这是把未初始化的max2(它的初始值是内存里的随机垃圾值,你看到的38就是这个)赋给变量,而不是把变量的值存到max2里!正确的写法应该是max2 = b,把你找到的第二大值赋值给max2才对。

  • 条件判断里的低级笔误
    比如这段代码:

    else if(c>c && c>b) c = max2;
    

    c>c永远是false,这明显是手滑打错了,应该是c>d对吧?这种笔误会导致逻辑分支根本走不到正确的地方,max2自然得不到正确的值。

  • 逻辑漏洞:没处理多个最大值的情况
    比如如果输入5 5 3 2,你的代码找到max=5后,判断max==a就去比较b、c、d,但b也是5,这时候你的逻辑会错误地把d(2)当成第二大,而正确的第二大应该是5。

修正后的代码示例

我给你写了个更简洁且逻辑严谨的版本,不管有没有重复值都能正确找到第二大数:

#include<stdio.h>
int main() {
    int a, b, c, d, max1, max2;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    
    // 先初始化最大和第二大的值
    if (a > b) {
        max1 = a;
        max2 = b;
    } else {
        max1 = b;
        max2 = a;
    }
    
    // 处理第三个数字c
    if (c > max1) {
        max2 = max1;
        max1 = c;
    } else if (c > max2) {
        max2 = c;
    }
    
    // 处理第四个数字d
    if (d > max1) {
        max2 = max1;
        max1 = d;
    } else if (d > max2) {
        max2 = d;
    }
    
    printf("%d", max2);
    return 0;
}

这个写法的思路是:先确定前两个数的最大和第二大,然后逐个把剩下的数和当前的最大、第二大比较,更新它们的值,这样逻辑清晰,也能覆盖所有情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:57:48