如果在 c 中检查三元或条件运算符 (x < y ? num1 : num2) 中的 < 条件,但输入值相等,会发生什么情况

What happens if you check for < condition in ternary or conditional operator(x < y ? num1 : num2) in c, but the input value is equal

所以我只是想写一个 C 代码来比较数字,三个数字中哪个最大,哪个最小。

然后我发现我可以使用三元运算符(例如:x < y ? num1 : num2), 所以我认为是的,这会起作用,然后我写了这段代码:

#include <stdio.h>
int main(){
int num1, num2, num3, largest, smallest;

printf("Enter three integers: ");
scanf("%d %d %d", &num1, &num2, &num3);

//largest among three integers.

largest = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);
printf("\nThe largest among the three is: %d", largest);

//smallest among three integers

smallest = num1 < num2 ? (num1 < num3 ? num1 : num3) : (num2 < num3 ? num2 : num3);
printf("\nThe smallest among the three is: %d", smallest);

return 0;
}

因此,如果我输入 num1 = 10、num2 = 20 和 num3 = 30,则输出为

Enter three integers: 10 20 30

The largest among the three is: 30
The smallest among the three is: 10

但是当所有这些数字都相等时会发生什么?三目运算符的条件是真还是假?

Enter three integers: 20 20 20

The largest among the three is: 20
The smallest among the three is: 20

我不知道是什么情况,但程序运行正常,输出正确。

我在 windows 10 和 gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0

上使用这个

如果这是一个蹩脚的问题,我很抱歉,但我没有找到任何相关信息。

如果条件运算符的第一个表达式的计算结果为假,则条件运算符的结果是第三个表达式的值。

比如在这个语句中

largest = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);

如果 num1 不大于 num2(即带有关系运算符 num1 > num2 的表达式的计算结果为 false),则此(第三个)表达式的计算结果为

(num2 > num3 ? num2 : num3)

同样,如果 num2 不大于 num3,则此表达式和整个封闭表达式的结果是 num3

的值

一般来说,布尔代数是这样的:a > b(“a 大于 b”)的相反是 a <= b(“a 小于或等于 b”)。

如果你想涵盖大于、小于和等于,那么你需要像这样的伪代码:

(a < b) ? smaller : ( (a > b) ? larger : equal )

这只是等效首选代码的一种晦涩难懂的方式:

if(a < b)
{}
else if(a > b)
{}
else // equal
{}

始终使用 if-else if 链而不是 ?: 链,除非您有特殊要求,例如在编写 function-like 宏时。

仅当 left 值比 [=24] 大 时,

> 更大的运算符才为 true =]正确值。否则会是 false

Will the condition of the Ternary operator be true or false?

n = x > y ? x : y;
如果 xy ,则

n 将被赋值为 x,否则(包括在 x == y) 的情况下,它将被分配 y

的值