函数无法返回值问题(已解决):获取三个数的最大最小值
三个数求最大最小值函数返回0的问题解决
你的代码能正常编译但输出0,核心是两个错误:
1. 赋值方向完全搞反
在largest和smallest函数中,你写的是first = number这类语句——number是未初始化的局部变量,默认值随机(这里刚好是0),你把这个无效值赋值给了参数,完全搞反了赋值逻辑。正确的应该是把判断出的最大/最小值赋值给number,也就是number = first这种形式。
2. 逻辑判断漏洞百出
以largest函数为例,你的条件first>second && second>third只覆盖了first > second > third这一种严格递减的情况,但像first > third > second、second > first > third这类情况完全没覆盖到,会导致错误进入else分支返回错误值。smallest函数的逻辑问题同理。
修正后的代码
#include <stdio.h> int smallest(int first, int second, int third); int largest(int first, int second, int third); int main() { int first_number, second_number, third_number, largest_number, smallest_number; printf("Enter the 1. number:"); scanf("%d", &first_number); printf("Enter the 2. number:"); scanf("%d", &second_number); printf("Enter the 3. number:"); scanf("%d", &third_number); largest_number = largest(first_number, second_number, third_number); smallest_number = smallest(first_number, second_number, third_number); printf("Among the numbers you entered,\nthe largest was %d and the smallest was %d.", largest_number, smallest_number); return 0; } int largest(int first, int second, int third) { int number = first; // 先假设第一个数是最大值 if (second > number) { number = second; // 如果第二个数更大,更新最大值 } if (third > number) { number = third; // 如果第三个数更大,更新最大值 } return number; } int smallest(int first, int second, int third) { int number = first; // 先假设第一个数是最小值 if (second < number) { number = second; // 如果第二个数更小,更新最小值 } if (third < number) { number = third; // 如果第三个数更小,更新最小值 } return number; }
这种写法逻辑简洁,能覆盖所有数值组合的情况,同时修正了赋值方向的问题,运行后就能得到正确的最大、最小值。
内容的提问来源于stack exchange,提问作者Kamer Surmeli
相关产品推荐
相关产品推荐

