Le langage C possède une paire d'opérateurs un peu exotiques qui peut être utilisée comme alternative à if - else et qui a l'avantage de pouvoir être intégrée dans une expression:
Les opérateurs conditionnels
<expr1> ? <expr2> : <expr3>* Si <expr1> fournit une valeur différente de zéro,
*
Si <expr1> fournit la valeur zéro,
alors la valeur de
<expr3> est fournie comme résultat
Exemple
La suite d'instructions
if (A>B) MAX=A; else MAX=B;peut être remplacée par:
MAX = (A > B) ? A : B;
Employés de façon irréfléchis, les opérateurs conditionnels peuvent nuire à la lisibilité d'un programme, mais si on les utilise avec précaution, ils fournissent des solutions très élégantes:
Exemple
printf("Vous avez %i carte%c \n", N, (N==1) ? ' ' : 's');
Les règles de conversion de types s'appliquent aussi aux opérateurs conditionnels ? : Ainsi, pour un entier N du type int et un rationnel F du type float, l'expression
(N>0) ? N : Fva toujours fournir un résultat du type float, n'importe si N est plus grand ou plus petit que zéro!