2017-04-24 2 views
-4

Pourquoi le code ci-dessous entraîne-t-il une boucle infinie?Pourquoi la boucle for se transforme-t-elle en une boucle infinie?

#include <stdio.h> 
void main() 
{ 
    int i; 
    for(i=0;i!=12;i++) 
    { 
    printf("%d\n",i); 
    i=12; 
    } 
} 
+3

'i ++' est excécuté à la fin de la boucle, donc je deviendrai 'i = 13' –

+0

demandez-vous si (12 + 1) == 12 est toujours vrai. – WhozCraig

+0

car après l'opération de boucle 'i ++' est exécuté, donc vous définissez 'i = 12' que vous l'incrémentez avec' i ++' et ensuite une nouvelle itération est effectuée qui vérifie si 'i! = 12' .. Je vous recommande, si vous ne Ne sachez pas exactement ce que fait le programme, utilisez le débogueur pour savoir ce qu'il fait. – Gondil

Répondre

1

i++ est à la fin étét exécutée de la boucle si i deviendra 13

2

Parce que i est jamais égal à 12quand il est vérifié par la boucle. Vous exécutez i++ après chaque itération de boucle, donc i est toujours égal à 13 lorsqu'il est coché.

Vous pouvez omettre la partie i++ entièrement, ou un ensemble i = 11; au lieu d'accomplir la même chose. (Bien sûr, puisque "la même chose" dans ce cas ne veut qu'une seule itération de la boucle, vous n'avez pas vraiment besoin d'une boucle en premier lieu, mais je suppose que c'est juste un exercice d'apprentissage artificiel.)

1

Cela se produit parce que la boucle for incrémente la variable avant de vérifier la condition de la boucle.

Voici le code avec la boucle for réécrite comme une boucle while:

#include<stdio.h> 
void main() 
{ 
    int i; 
    i=0; 
    while(i!=12) 
    { 
    printf("%d\n",i); 
    i=12; 
    i++; 
    } 
} 

Et voici sa sortie (les premières lignes):

0 
13 
13 
13 
... 

Chaque fois que dans la boucle, le code définit i à 12, puis l'incrémente immédiatement à 13 avant de vérifier la condition et de redémarrer la boucle. La boucle se terminera seulement quand i==12, ainsi elle fonctionnera pour toujours.