Probleme de boucle infini

Résolu
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   -  
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un petit souci:
j'ai fait une boucle do{}while{}
mais les element mis dans le while ne sont pas pris en compte :(
do 
{  
    //choix de la nouvelle case:
        x = (rand() % 8);
        if ( ((bugi + imove[x])<= m) && ((bugi + imove[x])>= 0) && ((bugj + jmove[x])<= n) && ((bugj + jmove[x])>= 0) )
        {
            bugi = bugi + imove[x];
            bugj = bugj + jmove[x];
            tab[bugi-1][bugj-1]++;
            nbdeplacement++;
        }
        test = 0;
        for (i = 0; i <= m-1; i++)
        {
            for (j = 0; j <= n-1; j++)
            {
                if (tab[i][j] == 0)
                {
                      test = 1;
                }
            }
        }
} while (test = 1 || nbdeplacement <= 10);

4 réponses

Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Bonjour,
Essaie avec while (test == 1 || nbdeplacement <= 10);
test = 1 c'est une affectation, donc c'est toujours vrai (et donc ta condition OR est vérifiée, d'où la boucle infinie).

Cordialement,
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
wow, sa marche, c'était tout con. merci beaucoup.
par contre la deuxième condition n'intervient hélas pas, tu sais pourquoi?
j'ai mis si il y a plus de 10 déplacement, on arrête la boucle, et la boucle continu alors que les dix déplacement on été fait :s
0
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Euh, en mettant un && à la place du ||.
Ta condition ici peut se traduire par "tant que test égal 1 , ou que le nombre de déplacements est inférieur ou égal à 10, je continue ma boucle".
Si ton test vaut 1, ta boucle va continuer (même si ton nombre de déplacements est supérieur à 10, ce qui n'arrivera pas avec un &&).

Cordialement,
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
a oui, je suis stupide...

un grand merci a toi
0
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Mais non, une erreur idiote passe souvent inaperçue, c'est aussi simple que cela.

A la prochaine !
0