输入不同但输出固定为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
相关产品推荐
相关产品推荐

