Question subsidaire du 3 octobre

Question subsidaire du 3 octobre

by Jean-Cédric Chappelier -
Number of replies: 1

Qu'affiche le code suivant (également joint en pièce jointe) :

  int i(-5);
  int j(2*i-1);

  i = -4;

  if (j == -9) {
    i = 2;
  } else {
    i = 3;
  }

  if (j = 5) {
    i = 4;
  } else {
    i = 5;
  }

  if (j == 0);
    i = 6;

  cout << i << ", " << j << endl;
  cout << j / i << endl;
In reply to Jean-Cédric Chappelier

Re: Question subsidaire du 3 octobre

by Jean-Cédric Chappelier -

Il affiche

6, 5
0

En effet : 

  • i est initialisé à -5 et j à -11
  • mais i est ensuite modifié en -4 puis en 3, puisque j ne vaut pas -9
  • ensuite, dans le if (piège !), j est affecté à 5, et, comme 5 est « vrai » (non nul) le if ligne 12 fait que i est à nouveau modifié pour valoir 4
  • le if suivant est vide (point-virgule juste derrière)
  • i est donc (de toutes façons car HORS du if) affecté à 6
  • la dernière division est une division ENTIERE