條件運算子第三運算子

計算其第一個運算元,如果結果值不等於零,則計算其第二個運算元。否則,它將計算其第三個運算元,如以下示例所示:

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 )