Partage
  • Partager sur Facebook
  • Partager sur Twitter

Return 0 n'est pas appelé - 1er TP

Return 0 n'est pas appelé dans une boucle while

    30 mars 2020 à 18:24:23

    Hello la compagnie :D 

    J'ai fini mon premier TP que j'ai essayé de faire le plus clean possible. J'ai maintenant besoin de vos retours. Tout fonctionne sauf la possibilité pour l'utilisateur de fermer le programme après une partie 2 joueurs. 

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main ( int argc, char** argv )
      { 
        int nombreMystere = 0, nombreEntre = 0, continuer = 1, modeJoueur, difficulte, MAX, MIN = 1; 
    
    printf("Bienvenue. Vous allez devoir deviner le nombre mystère. Voulez vous jouer à plusieurs ou seul ? \n Jouer seul = 0 \n Jouer à plusieurs = 1 \n"); 
    scanf("%d", &modeJoueur);
    
    do {
    if (modeJoueur == 0) { 
    // Selection de la difficulte 
      printf("\n A quel niveau de difficulté voulez vous vous frotter? \n 1 = facile \n 2 = moyen \n 3 = difficile \n"); 
      scanf("%d", &difficulte); 
    switch (difficulte) 
    {
      case 1:
    MAX = 10;
    printf ("Tu devines un nombre entre 1 et %d\n", MAX); 
    break;
      case 2:
    MAX = 100;
    printf ("Tu devines un nombre entre 1 et %d\n", MAX);
    break; 
      case 3: 
    MAX = 1000;
    printf ("Tu devines un nombre entre 1 et %d\n", MAX);
    break; 
      default : 
    printf ("Bon courage! \n");
    break;
    } 
        /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
        // do { 
          srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // Génération du nombre aléatoire
        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);
         // } while (modeJoueur == 0);
    } else {
         // Si le ModeJoueur Selectionne est mode 1 v 1 
    do {
          printf("Quel numero voulez vous faire deviner au collègue ?"); 
          scanf("%d", &nombreMystere);
      int nombreTours = 0;
          do {
            printf("Quel est le nombre ?");
            scanf("%d", &nombreEntre);
            nombreTours ++; 
            
            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); // L'instruction qui devrait permettre d'arrêter de jouer mais qui ne fonctionne pas 
                }
        } while (nombreEntre != nombreMystere); 
        } while (modeJoueur == 1); 
    }
    } while (continuer != 0);
      return 0;
       }
    


    1 - J'apprécierai tout vos retours pour que je délivre le code le plus pur possible 

    2 - Faire en sorte que l'utilisateur en mode 2 joueurs puisse mettre fin au programme (l.79 normalement) 

    Merci les confinés 

    -
    Edité par Le T 30 mars 2020 à 18:24:52

    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2020 à 18:34:42

      2) le problème vient de ta boucle do while ligne 62 à 82, elle va tourner continuellement car modeJoueur sera toujours égal à 1 vu qu'il n'est pas modifié dans la boucle, mais je pense que ce que tu voulais plutôt faire c'est continuer partie comme pour le mode un joueur.

      1) Commence par indenter ton programme, on y verra plus clair ! 

      • Partager sur Facebook
      • Partager sur Twitter
        30 mars 2020 à 22:10:01

        Merci pour ton retour. Tout fonctionne :D 


        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        
        int main ( int argc, char** argv )
        { 
        int nombreMystere = 0, nombreEntre = 0, continuer = 1, modeJoueur, difficulte, MAX, MIN = 1; 
        printf("Bienvenue. Vous allez devoir deviner le nombre mystère. Voulez vous jouer à plusieurs ou seul ? \n Jouer seul = 0 \n Jouer à plusieurs = 1 \n"); 
        scanf("%d", &modeJoueur);
        do 
        {
          if (modeJoueur == 0) { 
        // Selection de la difficulte 
            printf("\n A quel niveau de difficulté voulez vous vous frotter? \n 1 = facile \n 2 = moyen \n 3 = difficile \n"); 
            scanf("%d", &difficulte); 
              switch (difficulte) 
              {
              case 1:
                MAX = 10;
                printf ("Tu devines un nombre entre 1 et %d\n", MAX); 
                break;
              case 2:
                MAX = 100;
                printf ("Tu devines un nombre entre 1 et %d\n", MAX);
                break; 
              case 3: 
                MAX = 1000;
                printf ("Tu devines un nombre entre 1 et %d\n", MAX);
                break; 
              default : 
                printf ("Bon courage! \n");
                break;
              } 
            /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
            srand(time(NULL));
            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // Génération du nombre aléatoire
            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); 
          } 
          else 
          {
             // Si le ModeJoueur Selectionne est mode 1 v 1 
              printf("Quel numero voulez vous faire deviner au collègue ?"); 
              scanf("%d", &nombreMystere);
          int nombreTours = 0;
          do 
          {
              printf("Quel est le nombre ?");
              scanf("%d", &nombreEntre);
              nombreTours ++; 
                
          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); // L'instruction qui devrait permettre d'arrêter de jouer mais qui ne fonctionne pas 
          }
          } while (nombreEntre != nombreMystere);  
          }
        } while (continuer != 0); 
        return 0;
        }
        Que penses tu l'indentation ? D'autres pistes pour améliorer le code ?

        -
        Edité par Le T 30 mars 2020 à 22:10:14

        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2020 à 22:20:49

          Il me semble qu'à ce stade du cours on n'a pas encore abordé les tableaux et les fonctions. Or pour améliorer le code, il y a des choses à faire avec des tableaux et des fonctions. Du coup j'aurais tendance à t'encourager à ne pas trop t'attarder sur ce TP et à aller voir la suite du cours !

          • Partager sur Facebook
          • Partager sur Twitter

          Return 0 n'est pas appelé - 1er TP

          × 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