从if else变为三元运算符

时间:2012-06-28 16:27:04

标签: c if-statement

以下是正常代码:

       if(a==b)
            printf("equal");
        else if(a>b)
            printf("bigger");
        else
            printf("smaller");

我的老师想要改变if / else这个结构:

printf("%s",a>b?"bigger":"smaller")
当然,这只是一个简单而标准的。我不知道如何将其应用于上面的代码来替换if / else。

4 个答案:

答案 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?