6

私は次のようなプログラムフローを持っています:

if(a)
{
    if((a > b) || (a > c))
    {
        doSomething();
    }
    statementX;
    statementY;
}

これを条件式に変換する必要があります。これは私が行ったことです。

(a) ? (((a > b) || (a > c)) ? doSomething() : something_else) : something_else;

ステートメントstatementX、statementYをどこに挿入しますか?どちらの場合も実行する必要があるので、どうすればいいのかわかりません。

4

4 に答える 4

15

次のようにコンマ,演算子を使用できます。

a ? (
    (a > b || a > c ? do_something : do_something_else), 
    statementX, 
    statementY
  ) 
  : something_else;

次のプログラム:

#include <stdio.h>

int main ()
{
    int a, b, c;

    a = 1, b = 0, c = 0;

    a ? (
      (a > b || a > c ? printf ("foo\n") : printf ("bar\n")),
      printf ("x\n"),
      printf ("y\n")
    )
    : printf ("foobar\n");
}

私のために印刷:

foo
x
y
于 2013-02-27T14:00:36.463 に答える
3

あなたがステートメントを実行していて、割り当てていないことを考えると、私はif()条件に固執するでしょう。また、そのコードに出くわす可能性のある他の人にとっても、間違いなく読みやすくなっています。

何かを1行にするのは良いように見えるかもしれませんが、読みやすさを失うという点では、それだけの価値はありません(パフォーマンスの向上はありません)。

于 2013-02-27T14:00:28.093 に答える
3

ネストされた三項演算子ステートメントを使用できます

if(a)
{
if((a > b) || (a > c))
{
    printf("\nDo something\n");
}
printf("\nstatement X goes here\n");
printf("\nstatement X goes here\n");
}

上記のコードは、次のように置き換えることができます

(a) ? (   ( a>b || a>c )? printf("\nDo something\n");  :  printf("\nstatement X goes here\n");printf("\nstatement Y goes here\n");  )   : exit (0);

ここでの明らかな利点は、特定のロジックのコード行数を減らすことができることですが、同時にコードの可読性も低下させます。

于 2013-02-27T14:28:47.593 に答える
1

C三元演算子の優先順位と関連付けは、これを可能にするように設計されています。

return c1 ? v1 :
       c2 ? v2 :
       c3 ? v3 :
       c4 ? v4 :
       vdefault;

==!=> = <= <>、&&、||、^^演算子は三項演算子よりも優先順位が高いため、三項演算子自体のために括弧は必要ありません。

于 2020-11-30T17:22:00.060 に答える