0

这是正常的代码:

       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

4 回答 4

9

使用嵌套条件运算符通常不是一个好主意,但可以这样做:

printf("%s", a==b ? "equal" : (a > b ? "bigger" : "smaller"));
于 2012-06-28T16:28:38.680 回答
5

你的老师告诉你使用三元运算符。

// Generally it looks like this 
( predicate ) ? If_True : If_False ;

运算符可以与其自身堆叠(使用括号语句)以生成更复杂的逻辑。

( predicate_0 ) ? If_True : ( ( predicate_1 ) ? If_True : ... )) ;

尽管通常以这种方式堆叠三元运算符会使代码更难阅读。在大多数情况下,您最好使用该if ... else

于 2012-06-28T16:30:39.850 回答
1
printf("%s", a == b? "equal" : (a > b? "bigger" : "smaller"));
于 2012-06-28T16:29:43.563 回答
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 三元运算符:坏习惯还是好习惯?

于 2012-06-28T17:59:49.263 回答