Bonsoir,
Je suis un cours de débutant en C++ et je bloque sur la dernière question bonus de mon devoir, à savoir:
On me demande de rédiger volontairement le code "erroné" suivant:
La question est: avec la boucle "for" de la question précédente, la boucle s'arrêtait dès lors que i prenait la valeur 10. Est-ce le cas ici ? Et pourquoi ? A quelle valeur de i le programme s'arrête-t-il ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int main() { char i; for (i = 1; i < 10, i++;) { cout << (i+1) <<endl; } return 0; }
Honnêtement, je ne suis pas sur de comprendre.
Ici, clairement la réponse est non, ça ne s'arrête pas à i=10. Le programme s'arrête lorsque i prend la valeur de 0.
Je pense que la présence de la virgule après le i<10 rend justement l'argument i<10 inutile, et le "i++" devient la condition. En fait, j'ai l'impression que le programme vérifie "i" et incrémente "++" si "i" est vrai.
L'affichage que donne le code est le suivant:
3
4
(...)
128
-127
-126
(...)
-1
0
1
Je constate que le programme s'arrête à la valeur 128 et "fais un demi-tour" en valeurs négatives. Cette valeur 128 à l'affichage, qui correspond à i=127 (vu qu'on affiche i+1), n'est pas anodine, i étant un char, sur 8-bits, la valeur est donc comprise entre -127 et 127. Je suis tombé sur cette page internet intéressante: http://www.cplusplus.com/forum/beginner/18727/ mais je ne suis pas sûr de bien comprendre. Le programme s'est-il arrêté lorsque i est "out of memory" (et dépasse les 8 bits) ?
D'avance merci !
Partager