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

三項演算子が好きな人もいれば、そうでない人もいます。

あなたの先生はあなたにそれを見せて、あなたにそれを適用させるのに良いです。何でもそうですが、悪用される可能性があります。

ただし、他の方法では実行できない非常に優れた使用法が1つあります(AFAIK)。次のことを考慮してください。

#define MAX(_a_, _b_) (((_a_) > (_b_)) ? (_a_) : (_b_))

次のように使用できることに注意してください。

int x = MAX(5, 17);

if...elseステートメントでこれを実行できる方法はわかりません。(関数呼び出しでそれを行うこともできますが、それは重要ではありません。)

個人的には、最も単純な場合を除いて、三項を避けています。

また、記録として、Cの1行のコードは必ずしも4行のコードよりも速く実行されるとは限りません。ワンライナーを書くことができるように、ターナリーの使用には注意してください。

https://softwareengineering.stackexchange.com/questions/28314/is-the-ternary-operator-evil 三項演算子:悪いまたは良い習慣?

于 2012-06-28T17:59:49.263 に答える
1
printf("%s", a == b? "equal" : (a > b? "bigger" : "smaller"));
于 2012-06-28T16:29:43.563 に答える