尝试用三元运算符比较三个数字不起作用
trying three numbers comparision with ternary operator does not work
#include <stdio.h>
void main()
{
int n1, n2, n3, l;
printf("Enter any three numbers:\n");
scanf("%d %d %d", &n1, &n2, &n3);
(n1 >= n2) ? l = n1 : ((n1 >= n3) ? l = n1 : ((n2 >= n3) ? l = n2 : l = n3));
printf("Largest number = %d", l);
}
说“需要左值作为左操作数赋值”
已编辑:
#include <stdio.h>
void main()
{
int n1, n2, n3, lar;
printf("Enter any three numbers:\n");
scanf("%d %d %d", &n1, &n2, &n3);
lar = n1 >= n2 ? n1 : n2;
lar = lar >= n3 ? lar : n3;
printf("Largest number = %d", lar);
}
除了必须分解为 2 个部分外,这一个有效
?:
的优先级高于 =
。你应该这样做:
better_name_than_l = (n1 >= n2) ? n1 : ((n1 >= n3) ? n1 : ((n2 >= n3) ? n2 : n3))
作为奖励,代码从“非常不可读的混乱”变成了“稍微不可读的混乱”。
l
(L) 是一个非常糟糕的变量名称,因为它在许多字体上看起来像 1
(one) - 以至于像 MISRA C 这样的安全标准已经明确禁止l
作为变量名。
此外,由于我们已经确定我们讨厌可读代码(这是为了代码打高尔夫球,对吧?)我们甚至可以在任何地方去掉内括号:
better_name_than_l = n1 >= n2 ? n1 : n1 >= n3 ? n1 : n2 >= n3 ? n2 : n3;
优先级 >=
高于 ?:
高于 =
。
#include <stdio.h>
void main()
{
int n1, n2, n3, l;
printf("Enter any three numbers:\n");
scanf("%d %d %d", &n1, &n2, &n3);
(n1 >= n2) ? l = n1 : ((n1 >= n3) ? l = n1 : ((n2 >= n3) ? l = n2 : l = n3));
printf("Largest number = %d", l);
}
说“需要左值作为左操作数赋值”
已编辑:
#include <stdio.h>
void main()
{
int n1, n2, n3, lar;
printf("Enter any three numbers:\n");
scanf("%d %d %d", &n1, &n2, &n3);
lar = n1 >= n2 ? n1 : n2;
lar = lar >= n3 ? lar : n3;
printf("Largest number = %d", lar);
}
除了必须分解为 2 个部分外,这一个有效
?:
的优先级高于 =
。你应该这样做:
better_name_than_l = (n1 >= n2) ? n1 : ((n1 >= n3) ? n1 : ((n2 >= n3) ? n2 : n3))
作为奖励,代码从“非常不可读的混乱”变成了“稍微不可读的混乱”。
l
(L) 是一个非常糟糕的变量名称,因为它在许多字体上看起来像 1
(one) - 以至于像 MISRA C 这样的安全标准已经明确禁止l
作为变量名。
此外,由于我们已经确定我们讨厌可读代码(这是为了代码打高尔夫球,对吧?)我们甚至可以在任何地方去掉内括号:
better_name_than_l = n1 >= n2 ? n1 : n1 >= n3 ? n1 : n2 >= n3 ? n2 : n3;
优先级 >=
高于 ?:
高于 =
。