C语言max_of_four函数错误排查:为何无法输出正确最大值?
问题排查与代码修正
代码存在的核心问题
- 函数职责混淆:
max_of_four的设计目标是返回四个数的最大值,但当前代码在函数内部直接调用printf输出结果,且固定返回0。主函数又接收这个无效返回值并再次输出,导致最终输出是函数内的最大值加0(比如输入1 2 3 4会输出40),完全不符合预期。 - 条件判断逻辑漏洞:使用
>进行严格比较,当存在多个相等的最大值时(比如a=b=5,c=d=3),所有if条件都不满足,会错误走到else分支输出d的值。
修正后的代码
#include <stdio.h> int max_of_four(int a, int b, int c, int d); int main() { int a, b, c, d; scanf("%d %d %d %d", &a, &b, &c, &d); int ans = max_of_four(a, b, c, d); printf("%d", ans); return 0; } int max_of_four(int a, int b, int c, int d) { // 逐步比较,自然处理数值相等的情况 int max_val = a; if (b > max_val) max_val = b; if (c > max_val) max_val = c; if (d > max_val) max_val = d; return max_val; }
修正说明
- 让
max_of_four专注于计算最大值并返回,输出逻辑交给主函数处理,符合单一职责原则。 - 采用逐步比较的方式,无需复杂的多条件判断,同时完美兼容多个数值相等的场景。
内容的提问来源于stack exchange,提问作者AAKANKSHA KASHAYAP
相关产品推荐
相关产品推荐

