如何不依赖于用户的类型顺序

问题描述 投票:0回答:1
我正在尝试用 c 编写一个程序,当用户输入 3 个不同的数字时,程序返回最高的数字、中间的数字和最低的数字,但只有当用户按顺序输入时才有效

3,2,1

例如,我不希望这样,有什么建议可以防止这种情况发生吗?

代码:

#include <stdio.h> #include <stdlib.h> int main (){ int number = 0; int highestNumber = 0; int middleNumber = 0; int lowestNumber = 0; for(int i = 0; i < 3; i++){ printf("type the %d number: ", i); scanf("%d", &number); if(number > highestNumber){ highestNumber = number; } if(number < highestNumber && number < middleNumber){ lowestNumber = number; } if(number < highestNumber && number > lowestNumber){ middleNumber = number; } } printf("the highest number is: %d, the middle number is: %d and the lowest number is %d.", highiestNumber, middleNumber, lowestNumber); return 0; }
我希望代码按照我在 

printf()

 上输入的顺序返回,尽管输入的顺序是这样的。

c logic
1个回答
0
投票
假设您之前输入了

5

,现在处于循环的第二遍。您刚刚进入
6
。你的变量看起来像这样:

int number = 6; int highiestNumber = 5; int middleNumber = 0; int lowestNumber = 0;

number > highiestNumber

 为 true,因此您输入第一个 
if
,并使 
highiestNumber
 等于 
6
。但是您之前输入的 
5
 会发生什么情况呢?你刚刚覆盖了它!

当您将

highiestNumber

 的值替换为 
number
 的值时,您应该将 
number
 的值替换为 
highiestNumber
 的值。这会将旧值推到列表的下方。缺少这个。

与其他人的想法相同

if


还有一个问题,您接受带符号的数字,但您认为

0

 是可能的最低值。您应该改用 
unsigned
%u
 而不是 
int
%d
,或者按如下方式初始化变量:

#include <limits.h> int number; int highiestNumber = INT_MIN; int middleNumber = INT_MIN; int lowestNumber = INT_MIN;


最后,

highiestNumber

有太多
i

© www.soinside.com 2019 - 2024. All rights reserved.