Bonjour juste une question probablement simple . J'ai le code suivant
Je m'attendais à obtenir i = 2, mais à ma grande surprise ça affiche i = 1. J'aimerais comprendre pourquoi.Code:
1
2
3 i = 1 + ( 2 > 1)? 1 : 2; printf("%d\n", i);
Merci
Version imprimable
Bonjour juste une question probablement simple . J'ai le code suivant
Je m'attendais à obtenir i = 2, mais à ma grande surprise ça affiche i = 1. J'aimerais comprendre pourquoi.Code:
1
2
3 i = 1 + ( 2 > 1)? 1 : 2; printf("%d\n", i);
Merci
1) Tu devrais préciser le type de la variable i, même si c'est probablement un int.
2) Obtenir "i = 0" est un peu vague, j'imagine que tu veux simplement dire que ton code affiche "0" ?
3) Ne pas oubliez que l'opérateur ternaire est moins prioritaire que l'addition.
4) Quand j'exécute le bout de code qui suit, je n'obtiens en aucun cas "0"...
Code:
1
2
3
4
5
6
7
8
9
10
11 #include "stdio.h" int main() { int i = 1 + (2 > 1) ? 1 : 2; int j = (1 + (2 > 1)) ? 1 : 2; int k = 1 + ((2 > 1) ? 1 : 2); printf("%d\n", i); // Affiche "1". printf("%d\n", j); // Affiche "1". printf("%d\n", k); // Affiche "2". return 0; }
Salut
Ce que veut dire Chatanga c'est que dans 1 + ( 2 > 1)? 1 : 2, le ternaire fait une évaluation sur 1 + (2 > 1). Si cette évaluation est vraie alors le ternaire renvoie 1 sinon il renvoie 2.
D'ailleurs ta gestion des parenthèses montre que tu n'as pas bien compris que le ternaire était un opérateur entier. Ce n'est pas (2>1) qu'il faut encapsuler (comme si c'était un if) mais le ternaire tout entier si tu veux qu'il soit évalué comme tu l'entends
i=1 + (2 > 1 ?1 :2) donnera ce que tu attends...
Je n'avais effectivement pas compris qu'il s'agissait d'un opérateur à part entière.
Et pour le "i = 0", c'était une erreur de frappe (désolé), çà donnait bel et bien 1 et ça me paraissait tout autant bizarre. Mais maintenant c'est compris ;)
"? :" est un opérateur à part entière et est moins prioritaire que l'addition !
Merci !