条件运算符第三运算符
计算其第一个操作数,如果结果值不等于零,则计算其第二个操作数。否则,它将计算其第三个操作数,如以下示例所示:
a = b ? c : d;
相当于:
if (b)
a = c;
else
a = d;
这个伪代码代表它:condition ? value_if_true : value_if_false
。每个值都可以是计算表达式的结果。
int x = 5;
int y = 42;
printf("%i, %i\n", 1 ? x : y, 0 ? x : y); /* Outputs "5, 42" */
条件运算符可以嵌套。例如,以下代码确定三个数字中较大的一个:
big= a > b ? (a > c ? a : c)
: (b > c ? b : c);
以下示例将整数写入一个文件,将奇数整数写入另一个文件:
#include<stdio.h>
int main()
{
FILE *even, *odds;
int n = 10;
size_t k = 0;
even = fopen("even.txt", "w");
odds = fopen("odds.txt", "w");
for(k = 1; k < n + 1; k++)
{
k%2==0 ? fprintf(even, "\t%5d\n", k)
: fprintf(odds, "\t%5d\n", k);
}
fclose(even);
fclose(odds);
return 0;
}
条件运算符从右到左关联。考虑以下:
exp1 ? exp2 : exp3 ? exp4 : exp5
由于关联是从右到左,上面的表达式被评估为
exp1 ? exp2 : ( exp3 ? exp4 : exp5 )