【发布时间】:2019-02-25 14:36:39
【问题描述】:
有人问我是否可以编写代码来找到五个数字中最大的一个,而不是使用传统的 if...else(不能使用 switch 或遍历 - 受限)我决定使用紧凑版本,但是IMO 我发现它冗长且令人困惑(首先尝试了三个数字):
#include<stdio.h>
int main(void)
{
int a[3]={9,5,13};
printf("Biggest No. is: %d\n",(a[0]>
(a[1]>a[2]?a[1]:a[2])?a[0]:
(a[1]>a[2]?a[1]:a[2])));
return 0;
}
现在用这种方法对五个数字做这件事似乎是灾难性的,有没有什么办法可以使它更简单(仅通过使用?: 的这种紧凑方法)作为编写充当条件的表达式/strong> 再写成结果 好像太多了?
或者我应该使用传统的if ... else 块吗?
发现一件事:将宏用于一个表达式并将该宏用作另一个比较的条件和结果。
【问题讨论】:
-
我认为你应该做一个循环,而不是一个 --simple--
if else块 -
是的,使用
if ... else,或者使用sorting network,并取最后一个值。 -
在我看来,带有 if else 块的代码更容易阅读和维护。
-
如果只能使用 if else,那我宁愿使用它也不愿使用嵌套的几乎不可读的条件运算符集
-
?:真的不应该用于像这样的复杂情况,因为你说它很快就会变得不可读。理智的解决方案是使用循环来检查每个项目,或者对数据进行排序。其他都是废话,不值得花时间去琢磨。
标签: c