Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amélioration de "Plus ou Moins"

probleme de boucle do....while

Sujet résolu
    29 juillet 2007 à 13:20:11

    Salut à tous!
    Voilà depuis hier je suit le cours de mateo sur la programmation en C, et je trouve cela très bien fait!
    J'en suis actuellement au TP du jeux "Plus ou Moins".
    Je souhaite méliorer mon code mais j'ai un petit probleme avec une boucle do....while.

    Vous comprendrez mieux avec le code de la boucle :
    do
       {
            printf("Trouvez le nombre mystere :\n");
            scanf("%ld", &nombreEntre);
            printf("\n\n");
            compteur++;
           
       
           
            if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
                     { 
                     printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n", nombreDeCoupsAutorises);
                     }
            else if (nombreEntre < nombreMystere)
                     {
                     printf("C'est plus que %ld\n", nombreEntre);
                     }
            else if (nombreEntre > nombreMystere)
                     {
                     printf("C'est moins que %ld\n", nombreEntre);
                     }
            else if (nombreEntre > MAX)
                     {
                     printf("Je te rappeles que tu as choisis le niveau %ld et que le le nombre \nmaximum que tu peut entrer est %ld\n", difficulte, MAX);
                     printf("\n\n\n");
                     }
            else
                     {
                     printf("Felicitations, tu as trouve le nombre mystere en %ld coups\n", compteur);
                     }
                     
                     
       
       }while (nombreEntre != nombreMystere || nombreDeCoupsAutorises >= compteur);
       
       
        system("PAUSE");
    }
     


    En fait, une fois que le joueur a choisit le niveau de difficulté, selon celui ci, il y a un certains nombres de coups autorisés, une fois arrivé a ce nombre, je voudrais que le programme affiche cette phrase :
    printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n", nombreDeCoupsAutorises);


    Seulement, cette phrase s'affiche, mais comme toute cette partie se trouve dans la boucle, cela recommence
    printf("Trouvez le nombre mystere :\n");
            scanf("%ld", &nombreEntre);
            printf("\n\n");
            compteur++;
     



    Le probleme si je l'enleve de la boucle, le message ne s'affichera qu'une fois, Je ne sais pas coment faire :(

    Merci d'avance pour votre attention! :D
    • Partager sur Facebook
    • Partager sur Twitter
      29 juillet 2007 à 13:35:56

      montre nous montrer le code tout entier
      • Partager sur Facebook
      • Partager sur Twitter
        29 juillet 2007 à 14:06:10

        Le voici :

        int main ( int argc, char** argv )
        {
            long nombreMystere = 0, nombreEntre = 0, compteur = 0, MAX = 0, MIN = 1, nombreDeCoupsAutorises = 0, difficulte = 0;
            //Présentation du menu
            printf("Bienvenue dans le menu de difficulte du super jeux appele si fierement par \nmateao, le <<Plus ou Moins>>\n\n");
            printf("Choisis ton niveau de difficulte en tapant 1 pour facile, 2 pour moyen, 3 pour \ndifficile, et 4 pour extreme.\n\n");
           
           
            printf("***Difficulté***\n\n");
           
            printf("1. Facile : Trouver un nombre aleatoire compris entre 1 et 100 en un \nmaximum de 10 coups.\n\n");
            printf("2. Moyen : Trouver un nombre aleatoire compris entre 1 et 1 000 en un \nmaximum de 25 coups.\n\n");
            printf("3. Difficile: Trouver un nombre aleatoire compris entre 1 et 10 000 en un \nmaximum de 50 coups.\n\n");
            printf("4. Extreme: Trouver un nombre aleatoire compris en 1 et 100 000 en un \nmaximum de 200 coups.\n\n");
            printf("\n");
            do
            {
                       printf("Ton choix :");
                       scanf("%ld", &difficulte);
                       printf("\n\n");
                       
                       switch (difficulte)
                       {
                              case 1:
                                   printf("Tu as choisis le niveau facile, si tu croit que cela va être simple,\ntu fais fausse route !\n\n");
                                   MAX = 100;
                                   nombreDeCoupsAutorises = 10;
                                   break;
                              case 2:
                                   printf("Tu as choisis le niveau moyen, voyons ce ce que tu as dans ta tete...\n\n");
                                   MAX = 1000;
                                   nombreDeCoupsAutorises = 25;
                                   break;
                              case 3:
                                   printf("Tu as choisis le niveau difficie, tu vas devoir bien reflechir !\n\n");
                                   MAX =10000;
                                   nombreDeCoupsAutorises = 50;
                                   break;
                              case 4:
                                   printf("Tu as choisis le niveau extreme !! Tu n'y arriveras jamais !\n\n");
                                   MAX = 100000;
                                   nombreDeCoupsAutorises = 200;
                                   break;
                              default:
                                      {
                                      printf("Tu dois repondre ou par le chiffre 1, ou 2, ou 3, ou 4, selon le niveau \nde difficulte que tu souhaite. Recommence !\n\n");
                                      printf("\n\n\n");
                                      break;
                                      }
                       }
                       
            }while (difficulte < 1 || difficulte > 4);


            // 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
           {
                printf("Trouvez le nombre mystere :\n");
                scanf("%ld", &nombreEntre);
                printf("\n\n");
                compteur++;
               
           
               
                if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
                         { 
                         printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n", nombreDeCoupsAutorises);
                         }
                else if (nombreEntre < nombreMystere)
                         {
                         printf("C'est plus que %ld\n", nombreEntre);
                         }
                else if (nombreEntre > nombreMystere)
                         {
                         printf("C'est moins que %ld\n", nombreEntre);
                         }
                else if (nombreEntre > MAX)
                         {
                         printf("Je te rappeles que tu as choisis le niveau %ld et que le le nombre \nmaximum que tu peut entrer est %ld\n", difficulte, MAX);
                         printf("\n\n\n");
                         }
                else
                         {
                         printf("Felicitations, tu as trouve le nombre mystere en %ld coups\n", compteur);
                         }
                         
                         
           
           }while (nombreEntre != nombreMystere || nombreDeCoupsAutorises >= compteur);
           
           
            system("PAUSE");
        }

         
        • Partager sur Facebook
        • Partager sur Twitter
          29 juillet 2007 à 14:26:09

          Déja, dans ton default, il n'y a pas besoin d'accolades, ni dans les conditions if - else if - else où il n'y a qu' un seul ordre.

          Met la condition :
          if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
          {
          printf("Desole mais tu as perdu car tu a depasse le nombre de\ncoups autorises, c'est a dire %ld\n", nombreDeCoupsAutorises);
          }
          hors de la boucle, mais mets les deux boucles(choix du niveau et le jeu lui-même) dans une troisième boucle, à la fin de laquelle tu demande au joueur s'il veut faire une autre partie, si non, la boucle s'arrete.(grace à une variable continuer 1 pour une autre partie, 0 pour terminer le programme).
          • Partager sur Facebook
          • Partager sur Twitter
            29 juillet 2007 à 15:06:48

            nfini.

            Je ne m'en sort A L'AIDE!!! :D:(

            Merci d'avance!ombreMystere)
                             { 
                             printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n\n", nombreDeCoupsAutorises);
                             }

            J'ai mit un boucle while qui englobe tout le programme .
            Voici le code en entier :
            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>


            int main ( int argc, char** argv )
            {
               
                long partie = 1;
               
             while (partie)//Boucle qui englobe le menu de difficult ainsi que le jeu
            {
                long nombreMystere = 0, nombreEntre = 0, compteur = 0, MAX = 0, MIN = 1, nombreDeCoupsAutorises = 0, difficulte = 0;
                //Présentation du menu
                printf("Bienvenue dans le menu de difficulte du super jeux appele si fierement par \nmateao, le <<Plus ou Moins>>\n\n");
                printf("Choisis ton niveau de difficulte en tapant 1 pour facile, 2 pour moyen, 3 pour \ndifficile, et 4 pour extreme.\n\n");
               
               
                printf("***Difficulté***\n\n");
               
                printf("1. Facile : Trouver un nombre aleatoire compris entre 1 et 100 en un \nmaximum de 10 coups.\n\n");
                printf("2. Moyen : Trouver un nombre aleatoire compris entre 1 et 1 000 en un \nmaximum de 25 coups.\n\n");
                printf("3. Difficile: Trouver un nombre aleatoire compris entre 1 et 10 000 en un \nmaximum de 50 coups.\n\n");
                printf("4. Extreme: Trouver un nombre aleatoire compris en 1 et 100 000 en un \nmaximum de 200 coups.\n\n");
                printf("\n");
                do//boucle qui indique le choix de difficulté de l'utilisateur
                {
                           printf("Ton choix :");
                           scanf("%ld", &difficulte);
                           printf("\n\n");
                           
                           switch (difficulte)
                           {
                                  case 1:
                                       printf("Tu as choisis le niveau facile, si tu croit que cela va être simple,\ntu fais fausse route !\n\n");
                                       MAX = 100;
                                       nombreDeCoupsAutorises = 10;
                                       break;
                                  case 2:
                                       printf("Tu as choisis le niveau moyen, voyons ce ce que tu as dans ta tete...\n\n");
                                       MAX = 1000;
                                       nombreDeCoupsAutorises = 25;
                                       break;
                                  case 3:
                                       printf("Tu as choisis le niveau difficie, tu vas devoir bien reflechir !\n\n");
                                       MAX =10000;
                                       nombreDeCoupsAutorises = 50;
                                       break;
                                  case 4:
                                       printf("Tu as choisis le niveau extreme !! Tu n'y arriveras jamais !\n\n");
                                       MAX = 100000;
                                       nombreDeCoupsAutorises = 200;
                                       break;
                                  default:
                                          {
                                          printf("Tu dois repondre ou par le chiffre 1, ou 2, ou 3, ou 4, selon le niveau \nde difficulte que tu souhaite. Recommence !\n\n");
                                          printf("\n\n\n");
                                          break;
                                          }
                           }
                           
                }while (difficulte < 1 || difficulte > 4);


                // Génération du nombre aléatoire

                srand(time(NULL));
                nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

               

              do//boucle qui permet d'aider l'utilisateur dans le jeu.
               {
                    printf("Trouvez le nombre mystere :\n");
                    scanf("%ld", &nombreEntre);
                    printf("\n\n");
                    compteur++;
                   
               
                   
                   
                    if (nombreEntre < nombreMystere)
                             {
                             printf("C'est plus que %ld\n", nombreEntre);
                             }
                    else if (nombreEntre > nombreMystere)
                             {
                             printf("C'est moins que %ld\n", nombreEntre);
                             }
                    else if (nombreEntre > MAX)
                             {
                             printf("Je te rappeles que tu as choisis le niveau %ld et que le le nombre \nmaximum que tu peut entrer est %ld\n", difficulte, MAX);
                             printf("\n\n\n");
                             }
                    else
                             {
                             printf("Felicitations, tu as trouve le nombre mystere en %ld coups\n", compteur);
                             }
                             
                             
               
               }while (nombreEntre != nombreMystere || nombreDeCoupsAutorises >= compteur);
               
               
             
                           if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
                             { 
                             printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n\n", nombreDeCoupsAutorises);
                             }
                             
                             
                             printf("Tapez 1 pour refaire une partie, 0 pour quitter le programme.");
                             scanf("%ld", &partie);
                             
               
            }
                             
                system("PAUSE");
            }

             


            Le problème maintenant, c'est que lorsque le compteur = le nombre de coups autorises, cela me marque :
            "Desole mais tu as perdu car tu a depasse le nombre de coups autorises, c'est a dire 10" et cela à l'i
            • Partager sur Facebook
            • Partager sur Twitter
              29 juillet 2007 à 15:18:48

              essaye de mettre l'initialisation de tes variables or de la boucle et

              • Partager sur Facebook
              • Partager sur Twitter
                29 juillet 2007 à 15:21:33

                Merci de ton aide mais zut! cela ne marche toujours pas, je perds espoir (nan je rigole faut jamais baisser les bras)
                D'autres propositions? :D
                • Partager sur Facebook
                • Partager sur Twitter
                  29 juillet 2007 à 15:25:40

                  if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
                  {
                  printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n\n", nombreDeCoupsAutorises);
                  }


                  printf("Tapez 1 pour refaire une partie, 0 pour quitter le programme.");
                  scanf("%ld", &partie);

                  tu peux le mettre or de la boucle
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 juillet 2007 à 15:32:41

                    C'est bon j'ai trouvé le probleme.
                    J'avais mal organisé mon code et m'était perdu dedans mais en relisant attentivement cela marche a la perfection!

                    Voici le code peut-etre que cela pourrait aider certaines personnes :
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <time.h>


                    int main ( int argc, char** argv )
                    {
                       
                        long partie = 1;
                        long nombreMystere = 0, nombreEntre = 0, compteur = 0, MAX = 0, MIN = 1, nombreDeCoupsAutorises = 0, difficulte = 0;
                       
                     while (partie)//Boucle qui englobe le menu de difficult ainsi que le jeu
                    {
                       
                        //Présentation du menu
                        printf("Bienvenue dans le menu de difficulte du super jeux appele si fierement par \nmateao, le <<Plus ou Moins>>\n\n");
                        printf("Choisis ton niveau de difficulte en tapant 1 pour facile, 2 pour moyen, 3 pour \ndifficile, et 4 pour extreme.\n\n");
                       
                       
                        printf("***Difficulté***\n\n");
                       
                        printf("1. Facile : Trouver un nombre aleatoire compris entre 1 et 100 en un \nmaximum de 10 coups.\n\n");
                        printf("2. Moyen : Trouver un nombre aleatoire compris entre 1 et 1 000 en un \nmaximum de 25 coups.\n\n");
                        printf("3. Difficile: Trouver un nombre aleatoire compris entre 1 et 10 000 en un \nmaximum de 50 coups.\n\n");
                        printf("4. Extreme: Trouver un nombre aleatoire compris en 1 et 100 000 en un \nmaximum de 200 coups.\n\n");
                        printf("\n");
                        do//boucle qui indique le choix de difficulté de l'utilisateur
                        {
                                   printf("Ton choix :");
                                   scanf("%ld", &difficulte);
                                   printf("\n\n");
                                   
                                   switch (difficulte)
                                   {
                                          case 1:
                                               printf("Tu as choisis le niveau facile, si tu croit que cela va être simple,\ntu fais fausse route !\n\n");
                                               MAX = 100;
                                               nombreDeCoupsAutorises = 10;
                                               break;
                                          case 2:
                                               printf("Tu as choisis le niveau moyen, voyons ce ce que tu as dans ta tete...\n\n");
                                               MAX = 1000;
                                               nombreDeCoupsAutorises = 25;
                                               break;
                                          case 3:
                                               printf("Tu as choisis le niveau difficie, tu vas devoir bien reflechir !\n\n");
                                               MAX =10000;
                                               nombreDeCoupsAutorises = 50;
                                               break;
                                          case 4:
                                               printf("Tu as choisis le niveau extreme !! Tu n'y arriveras jamais !\n\n");
                                               MAX = 100000;
                                               nombreDeCoupsAutorises = 200;
                                               break;
                                          default:
                                                  {
                                                  printf("Tu dois repondre ou par le chiffre 1, ou 2, ou 3, ou 4, selon le niveau \nde difficulte que tu souhaite. Recommence !\n\n");
                                                  printf("\n\n\n");
                                                  break;
                                                  }
                                   }
                                   
                        }while (difficulte < 1 || difficulte > 4);//fin de la boucle qui indique les choix


                        // Génération du nombre aléatoire

                        srand(time(NULL));
                        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

                       

                      do//boucle qui demande l'entrée d'un nombre
                       {
                            printf("Trouvez le nombre mystere :\n");
                            scanf("%ld", &nombreEntre);
                            printf("\n\n");
                            compteur++;
                           
                       
                           
                            if (nombreDeCoupsAutorises == compteur && nombreEntre != nombreMystere)
                                     { 
                                     printf("Desole mais tu as perdu car tu a depasse le nombre de \ncoups autorises, c'est a dire %ld\n\n", nombreDeCoupsAutorises);
                                     printf("Tapez 1 pour refaire une partie, 0 pour quitter le programme.");
                                     scanf("%ld", &partie);
                                     }
                            else if (nombreEntre < nombreMystere)
                                     {
                                     printf("C'est plus que %ld\n", nombreEntre);
                                     }
                            else if (nombreEntre > nombreMystere)
                                     {
                                     printf("C'est moins que %ld\n", nombreEntre);
                                     }
                            else if (nombreEntre > MAX)
                                     {
                                     printf("Je te rappeles que tu as choisis le niveau %ld et que le le nombre \nmaximum que tu peut entrer est %ld\n", difficulte, MAX);
                                     printf("\n\n\n");
                                     }
                            else
                                     {
                                     printf("Felicitations, tu as trouve le nombre mystere en %ld coups\n", compteur);
                                     }
                                 
                            }while (nombreEntre != nombreMystere || nombreDeCoupsAutorises >= compteur);//fin de la boucle qui demande l'entrée d'un nombre   
                                     
                    }//fin de la boucle globale           
                        system("PAUSE");
                    }

                     


                    Merci à tous pour votre aide!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Amélioration de "Plus ou Moins"

                    × 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