Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réinitialiser 1 variable d'une boucle Do...While

Réinitialiser le compteur du nombre de tours pour chaque tentative

Sujet résolu
    27 mars 2020 à 19:11:53

    Hello tout le monde, 

    Pour le TD "Plus ou Moins votre premier jeu - Apprenez à programmer en C", mon code compte bien le nombre d'essais total mais je n'arrive pas réinitialiser la valeur à 0 pour chaque nouveau nombre à deviner. Pour faire simple : - Le jouer trouve en 6 une première fois. - Il trouve en 4 celle d'après. - Il trouve en 9 enfin --> le message sera vous avez trouvé en 19 essais

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main ( int argc, char** argv )
      { 
        int nombreMystere = 0, nombreEntre = 0, nombreTours = 0, continuer = 1; // On initialiser nombreTours qui compte les essais 
        const int MAX = 100, MIN = 1;
    
        // Génération du nombre aléatoire
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
        /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
        do {
          do {
            // On demande le nombre
            printf("Quel est le nombre ?");
            scanf("%d", &nombreEntre);
            nombreTours ++; // On incrémente le nombre de tours car c'est un nouvel essai pour le joueur 
            
            // On compare le nombre entré avec le nombre mystère
            if (nombreMystere > nombreEntre)  
                printf("C'est plus !\n\n");
            else if (nombreMystere < nombreEntre)
                printf("C'est moins !\n\n");
            else {
                printf("Bravo, vous avez trouvé le nombre mystere !!! Cela vous a demandé %d essais. \n\n", nombreTours); 
                printf ("Voulez vous rejouer ? \n");
                printf ("Non = 0 \nOui = 1 \n \n");
                scanf("%d", &continuer); // La boucle pour demander à rejouer fonctionne
                }
        } while (nombreEntre != nombreMystere); 
        } while (continuer != 0);
        return 0;
    } 

    J'ai du mal à utiliser la fonction do...while.
    Je n'ai pas envie de placer l'instruction d'incrémentation "nombreTours++" dans chaque if/else pour faire le code le plus propre possible. 

    Quels sont vos conseils ? 
    Merci beaucoup pour votre aide 

    *EDIT* J'ai trouvé : il fallait initialiser dans le premier "do" qui débute une nouvelle partie

    -
    Edité par Le T 27 mars 2020 à 19:22:46

    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2020 à 19:21:13

      Coucou aussi ! Je ne vois pas la variable qui compte le nombre d'essai. Est-ce qu'il ne manquerait pas un bout du programme ?
      • Partager sur Facebook
      • Partager sur Twitter
        27 mars 2020 à 19:25:04

        Je l'avais nommé "nombreTours" l.7

        Je viens de m'apercevoir que l'initialisation devait se faire plus en aval, dans la boucle du premier "do" (l.15) afin que cela soit màj à chaque nouvelle partie.



        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        
        int main ( int argc, char** argv )
          { 
            int nombreMystere = 0, nombreEntre = 0, continuer = 1; // On initialiser nombreTours qui compte les essais 
            const int MAX = 100, MIN = 1;
        
            // Génération du nombre aléatoire
            srand(time(NULL));
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        
            /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
            do { int nombreTours = 0;
              do {
                // On demande le nombre
                printf("Quel est le nombre ?");
                scanf("%d", &nombreEntre);
                nombreTours ++; // On incrémente le nombre de tours car c'est un nouvel essai pour le joueur 
                
                // On compare le nombre entré avec le nombre mystère
                if (nombreMystere > nombreEntre)  
                    printf("C'est plus !\n\n");
                else if (nombreMystere < nombreEntre)
                    printf("C'est moins !\n\n");
                else {
                    printf("Bravo, vous avez trouvé le nombre mystere !!! Cela vous a demandé %d essais. \n\n", nombreTours); 
                    printf ("Voulez vous rejouer ? \n");
                    printf ("Non = 0 \nOui = 1 \n \n");
                    scanf("%d", &continuer); // La boucle pour demander à rejouer fonctionne
                    }
            } while (nombreEntre != nombreMystere); 
            } while (continuer != 0);
            return 0;
        } 

        Voila le code updaté qui fonctionne :D

        -
        Edité par Le T 27 mars 2020 à 19:26:05

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2020 à 19:29:44

          Ah oui, je n'ai pas été assez attentif...

          Bien joué ! :)

          • Partager sur Facebook
          • Partager sur Twitter
            27 mars 2020 à 19:41:18

            Merci pour ton aide :D 
            Bon weeknd
            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2020 à 21:31:15

              Bonjour,

              Sujet résolu

              Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)
              • Partager sur Facebook
              • Partager sur Twitter

              Réinitialiser 1 variable d'une boucle Do...While

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown