我的程序流程如下:
if(a)
{
if((a > b) || (a > c))
{
doSomething();
}
statementX;
statementY;
}
我需要将其转换为条件表达式,这就是我所做的:
(a) ? (((a > b) || (a > c)) ? doSomething() : something_else) : something_else;
我在哪里插入语句statementX,statementY?由于需要在两种可能的情况下执行,我无法找到方法。
答案 0 :(得分:12)
您可以像这样使用逗号,
运算符:
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
答案 1 :(得分:3)
考虑到你正在执行语句而不是分配,我会坚持if()
条件。对于任何可能遇到这段代码的人来说,它也更具可读性。
答案 2 :(得分: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);
这里显而易见的优势是能够减少给定逻辑的代码行数,但同时也降低了代码的可读性。
答案 3 :(得分:0)
C三元运算符的优先级和关联是为此目的而设计的:
return c1 ? v1 :
c2 ? v2 :
c3 ? v3 :
c4 ? v4 :
vdefault;
As ==!=> = <= <>,&&,||,^^运算符的优先级高于三元运算符,由于三元运算符本身,因此不需要括号。