Exercice flou - simple calcul en C

bonjour tout le monde,
Je suis tout nouveau en C, donc permettez moi de poster cette question banale :wink:
J’ai un petit exercice dont je ne comprends pas le résultat :

#include <stdio.h>
#include <conio.h>
main()
{
   int N=10, P=5, Q=10, R;
   char C='S';

   N = 5; P = 2;
   Q = N++ > P || P++ != 3;
   printf ("C : N=%d P=%d Q=%d\n", N, P, Q);

   N = 5; P = 2;
   Q = N++ < P || P++ != 3;
   printf ("D : N=%d P=%d Q=%d\n", N, P, Q);

   getch();
   return 0;
}

le résultat donne :

C : n=6 p=2 q=1
	D : n=6 p=3 q=1

N a été incrementé dans les 2 calculs (C et D) par contre je ne comprends pas pourquoi P n’a pas été incrementé dans le premier cas.
Merci pour vos réponses.
a+

En langage C, si le premier membre d’une condition “ou” est vrai, le second n’est pas évalué, car inutile (de même, dans une condition “et”, le second membre n’est pas évalué si le premier est faux).

Donc dans ton premier cas :


N = 5; P = 2;
  Q = N++ > P || P++ != 3;
  printf ("C : N=%d P=%d Q=%d\n", N, P, Q);

5 est superieur à 2, ta condition est donc vraie et par souci d’optimisation il n’évalue pas “P++ != 3”. P garde donc sa valeur d’origine (si un des membres d’une condition “ou” est vrai, alors la condition sera forcement vraie peu importe le résultat des autres membres).

Dans ton second cas :


  N = 5; P = 2;
  Q = N++ < P || P++ != 3;
  printf ("D : N=%d P=%d Q=%d\n", N, P, Q);

5 n’est pas inférieur à 2, la première condition est donc fausse. Il évalue donc ensuite le second membre et incrémente P :wink:

Merci infiniment 'kookiz33 :super: ’ c’est très très claire maintenant :wink:
a+