Boucle while ne veut pas bouclé

Résolu/Fermé
strato-boy Messages postés 769 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 19 janvier 2011 - 29 mars 2010 à 14:02
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 - 29 mars 2010 à 15:48
hello les codeurs! dites, j'ai une boucle qui me pose probleme ... elle veut pas bouclé même quand on demande de bouclé ... tout fonctionne bien sauf le retour au début de la boucle.
et pas moyen de trouvé le problème ... quelqu'un pour m'aider? voila la fautive :
    while(1)
    {
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        printf("\n********************\nLE NOMBRE MYSTERE\n********************\n");
        printf("trouvez le nombre mystere ! (entre 1 et 100) \n");
        do
        {
            printf("entrez votre nombre !\n");
            scanf("%d", &choix);
            if (choix < nombreMystere)
            {
                printf("\n plus haut ! plus haut ! \n");
                counter++;
            }
            else if (choix > nombreMystere)
            {
                printf("\nPlus bas ! Plus bas ! \n");
                counter++;
            }
            else
            {
                counter++;
                printf("\n\tBingo !! t'as gagner le gros lot ! felicitation!\n il t'auras fallu %d coups pour trouver.\n", counter);
            }
        }while (choix != nombreMystere);
    puts("Autre partie ? ( o ou n ) ?");
    do
    {
        ch = getchar();
    } while (ch != 'n' && ch != 'o');
    if (ch == 'n' )
        break;
    }

normalement la boucle devrait reprendre si l'utilisateur rentre o ... mais sa veut pas ... merci a tout ceux qui pourront m'aidé


1 réponse

perlenoir Messages postés 1721 Date d'inscription mercredi 15 août 2007 Statut Membre Dernière intervention 20 mai 2011 139
29 mars 2010 à 14:07
le break a la fin tu a essayer de le mettre entre accolades

{break;}

juste pour qu'il sache qu'il appartien au if et qu'il ne s'execute pas d'office.

a ce que j'ai compris le pb c'est le "while(1)" qui fonctionne jamais ?
0
strato-boy Messages postés 769 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 19 janvier 2011 100
29 mars 2010 à 14:14
oui voila, jvai le mettre entre accolade, mais bon, je pense ecrit comme sa sa aurait du passer non ?
0
strato-boy Messages postés 769 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 19 janvier 2011 100
29 mars 2010 à 14:17
sa a réglé le probleme on dirait ... mais s'a m'étonne que mon ecriture n'ait pas était accepté ...
m'enfin merci de ton aide. sa marche et c'est le plus important.
0
Ben oui. Faut pas oublier la bonne structure de la condition.

if (ch == 'n' ) { 
        break; 
}


Qui va donc être égale à :

if (ch == 'n' ) {break;}


Mais c'est beaucoup plus moche ...
Surtout ne pas oublier les accolades quand on fait une condition.
0
perlenoir Messages postés 1721 Date d'inscription mercredi 15 août 2007 Statut Membre Dernière intervention 20 mai 2011 139
Modifié par perlenoir le 29/03/2010 à 14:24
if (ch == 'n' )
break;

sa ne marchait pas, mais si tu l'avais mise comme sa.

if (ch == 'n' ) break;

sur la même ligne sa devrai marcher

je croi que le compilateur a compri

1- si (truc est vrai) ben il y a rien donc fou rien dans les deux cas

2 -break; arrête tout indépendamment du si

et avec les accolades il comprend que c'est la suite du if
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
29 mars 2010 à 15:48
L'astuce, c'est que dans différents langages de programmation (le C# par exemple) l'instruction suivant un If est forcément rattachée à elle si il n'y a pas d'accolades... Uniquement si une seule instruction bien entendu.

if (condition)
                  break;

aurait été perçue de la même façon que
if (condition) { break; }


Enfin bref... Bienvenue dans l'aspect strict du langage C ;)
0