以下是正常代码:
if(a==b)
printf("equal");
else if(a>b)
printf("bigger");
else
printf("smaller");
我的老师想要改变if / else这个结构:
printf("%s",a>b?"bigger":"smaller")
当然,这只是一个简单而标准的。我不知道如何将其应用于上面的代码来替换if / else。
答案 0 :(得分:9)
使用嵌套条件运算符通常不是一个好主意,但可以这样做:
printf("%s", a==b ? "equal" : (a > b ? "bigger" : "smaller"));
答案 1 :(得分:5)
您的老师告诉您使用三元运算符。
// Generally it looks like this
( predicate ) ? If_True : If_False ;
操作员可以自己堆叠(使用括号语句)来生成更复杂的逻辑。
( predicate_0 ) ? If_True : ( ( predicate_1 ) ? If_True : ... )) ;
虽然通常以这种方式堆叠三元运算符会使代码更难以阅读。在大多数情况下,最好使用if ... else
块
答案 2 :(得分:1)
printf("%s", a == b? "equal" : (a > b? "bigger" : "smaller"));
答案 3 :(得分:1)
有些人喜欢三元运算符,有些则不喜欢。
你老师很适合向你展示,并让你应用它。像任何东西一样,它可能被滥用。
然而,有一个非常酷的用途,不能以任何其他方式(AFAIK)。请考虑以下事项:
#define MAX(_a_, _b_) (((_a_) > (_b_)) ? (_a_) : (_b_))
请注意,您可以像这样使用:
int x = MAX(5, 17);
我不知道你用if ... else语句可以做到这一点。 (你可以通过函数调用来完成它,但这不是重点。)
就个人而言,除了最简单的情况外,我避免使用三元。
对于记录,C中的1行代码不一定比4行代码执行得更快。警惕使用三元组,这样你就可以编写1个内衬。
https://softwareengineering.stackexchange.com/questions/28314/is-the-ternary-operator-evil Ternary operator: bad or good practice?