Est ce qu'une boucle for peut etre infinie?!!

benfati Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
 benfati -
boujour a tous
Je suis en train de programmer l'algorithme de Dijkstra, en C, et je me suis retrouvée avec une boucle for infini!! En fait , j'ai inséré printf("test") parmi les instructions de la boucle , lorsque je lance le programme le mot test s'imprime infiniment a l'écran. Je veux savoir si quelqu'un parmi vous avait déjà rencontré ce pb, et qu'est ce que peut etre l'erreur.
Merci d'avance

fatima

10 réponses

rameur
 
boucles infinies :
- for(i =0; ; i++) , la condition est vide et consideree comme vraie
- for( ; ; ), pareil
- for(i = 0; i < i; ), la valeur de i ne change jamais...
2
garfield
 
0-1 = -1 enfin vous aurez compris ;-p
1
Time RUNNER
 
OUI !

exemple de boucle infinie:

for (int i=0; i<100; i++)
{
i--;
printf("coucou\n");
}

pour éviter les boucles infinie
1)vérifies les 2 critères:

1)a)initialisation i=0

1)b)condition d'arrêt i<100

1)c)incrément i++

2) ne modiçfies JAMAIS l'indice dans le corps de la boucle (le i-- qui fout la grouille ici ...) SAUF cas particuliers si tu maitrises !!

Time RUNNER
0
garfield
 
A vrai dire c'est tout con.

Le
for( int i=0; i<100; i++)
{
i--;
printf("%d", i);
}

si tu l'as fait, tu obtiendra -1 -1 ........ car i-- signifie i<-- i-1
or si i=0, à la fin tu as i=-1, deuxième boucle : i=-1+1=0, fin deuxième i=0-1 = 0 et ainsi de suite.
C'est une boucle méchante qui ne sert qu'à se casser la tête dessus. ^^
je te conseille d'enlever i-- si tu veux qu'elle fonctionne.

De plus, je te conseille aussi de mettre :

int i;
for (i=0;i<100; i++)
sinon je sais pas si ça marche mais moi ça me choque lol.
0
Time RUNNER
 
Salut Garfield

j'ai donné un exemple de code avec boucle inifnie pour Benfati en expliquant le problème.

l'explication que tu donnes montre que tu as bien compris le problème.

@+,

Time RUNNER
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
for( int i=0; i<100; i++)
{
i--;
printf("%d", i);
}


certes mais encore plus simple ou classique:

for( int i=100; i>0; i++)
{
printf("%d", i);
} 



par exemple, on ecrit i++ par habitude alors que l'on veut une boucle inversee...et la au revoir :-D

Le TeebObeeT préféré de la moche...
0
Time RUNNER
 
Salut Teebo,

ton code n'est pas une boucle infinie, car quand i atteindra la valeur MAX possible pour un entier en C/C++, il passera à la vlaeur MIN juste après (qui est négative), donc le test i>0 provoquera la fin de la boucle.

for( int i=100; i>0; i++)
{
printf("%d", i);
}
0
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793 > Time RUNNER
 
Ouais enfin ca depend ce qu'il fait dans sa boucle, j'en ai eu plusieurs qui ne sont jamais revenues de boucles comme ca moi :o)

Le TeebObeeT préféré de la moche...
0
blurk Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   160
 
Pour faire une boucle infinie, pas besoin de se casser la tête !

for (int i=0;  True; i++)
 { 
 printf("%d\n",i);
 }

encore plus simple :
for (;  ;)
 { 
 printf("ca continue\n");
 }


Sinon pour revenir sur le commentaire de garfield,
déclarer une variable dans une boucle, c'est typiquement C++
et ça permet de limiter la durée de vie des variables,
ce qui allège l'occuppation du tas et de la mémoire.
mais attention, ce n'est pas du C authentique et certains
compilateurs refusent.

Ca peut étonner certains, mais dans les logiciels embarqués,
on voit quelquefois des boucles infinies, sauf que dedans il y a des breaks conditionels

d'accord aussi avec Time RUNNER, i étant un entier 32 bits,
passé 2 milliards (2^32) i vaudra -2milliards


¤
0
JAROD
 
Salut a tous je pense que Vous Bavardez (excusez moi) pour ne rien dire.
Je pense que le Mec a un probleme. Le mieux serai qu'il donne le code qu'il a ecrit et ainsi on poura voir ou se trouve l'erreur. Sinon je pense ke c'est con de chercher a creer une boucle infini sauf si on veux peter les meninges de son processeur.
Alors BENFATI jatan ton code ...
A+ (^_^)
0
Utilisateur anonyme
 
Bonjour,

Sinon je pense ke c'est con de chercher a creer une boucle infini sauf si on veux peter les meninges de son processeur.

C'est pas toujours "con" : il y a une boucle infinie dans tous les programmes évènementiels sous X11. On emploie alors par exemple for (;;)

On ne "pete" pas pour autant le processeur (heureusement) - qui d'ailleurs n'a pas de méninges...

a+
0
Time RUNNER
 
pour répondre à JAROD, Benfati avait entre autres demandé:

"Je veux savoir si quelqu'un parmi vous avait déjà rencontré ce pb, et qu'est ce que peut etre l'erreur."

Donc nous répondu de manière constructive à CETTE question.

Tu as dit:
"Sinon je pense ke c'est con de chercher a creer une boucle infini sauf si on veux peter les meninges de son processeur. "

c'est oublier bien vite que les threads classqiues Java ont tous une boucle:
while (true) {
// faire quelquechose ...
}

A l'avenir, évites d'employer des termes vulgaires sans bien LIRE et COMPRENDRE les posts au préalable.

merci d'avance.

Time.
0
benfati
 
Merci à tous le monde, jai appris plein de choses, maintenant j'ai réussi à corriger mon erreur.
merci une deuxieme fois
0