如果在 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;
如果 x
比 y
大 ,则 n
将被赋值为 x
,否则(包括在 x == y
) 的情况下,它将被分配 y
的值
所以我只是想写一个 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 宏时。
>
更大的运算符才为 true
=]正确值。否则会是 false
Will the condition of the Ternary operator be true or false?
n = x > y ? x : y;
如果 x
比 y
大 ,则 n
将被赋值为 x
,否则(包括在 x == y
) 的情况下,它将被分配 y