Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP Plus ou Moins. Cherchez l'erreur

Sujet résolu
    22 septembre 2017 à 18:35:59

    Bonjour, 

    Je suis à la fin des améliorations du premier TP. Depuis que j'ai créé les différents niveaux de difficultés, la commande "else" de mon mode solo ne marche plus. Je cherche le nombre, et lorsque je le trouve, la console n'affiche pas le "Bien joue etc...". Au lieu de ça, il semble qu'un nouveau nombreMystere soit généré, et cela sans fin. Je ne sais pas si je me fais bien comprendre. Si nombreMystere est 40: je mets 39, ellel me dit c'est plus; si je mets 41, elle me dit c'est moins; je mets donc 40. A ce moment elle j'ai le droit à un "C'est plus" ou "C'est moins" et un nouveau nombreMystere est généré. Je ne vois pas où est mon erreur. 

    Merci d'avance pour votre aide

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        int nombreMaximun = 0, nombreMystere = 0, nombreMystereJoueur = 0, nombreEntre = 0, compteur = 0, modeDeJeu = 0, niveau = 0, continuerPartie = 1;
        const int MIN = 1;
    
    
    printf("------Bienvenu------\n\n");
    
     do
     {
    
     printf("Veuillez choisir un mode de jeu\n");
     printf("1.Solo / 2.Multi\n");
     scanf("%d", &modeDeJeu);
    
    
    
      if (modeDeJeu == 1)
      {
        printf("Vous avez choisi le mode solo\n\n");
        compteur = 0;
        printf("Veuillez choisir un niveau de difficulte:\n");
        printf("1.entre 1 et 100 / 2. entre 1 et 1000 / 3.entre 1 et 10000\n");
        scanf("%d", &niveau);
    
        switch (niveau)
       {
        case 1 :
        nombreMaximun = 100;
    
        break;
        case 2 :
        nombreMaximun = 1000;
    
        break;
        case 3 :
        nombreMaximun = 10000;
    
        break;
    
        default :
        printf("niveau 1 par défault");
        nombreMaximun = 100;
        break;
       }
          do
          {
            srand(time(NULL));
            nombreMystere = (rand() % (nombreMaximun - MIN + 1)) + MIN;
            printf("Entrez votre choix\t");
            scanf("%d", &nombreEntre);
            compteur++;
    
            if (nombreEntre > nombreMystere)
            printf("C'est moins ! Vous etes a %d essai(s)\n\n", compteur);
            else if (nombreEntre < nombreMystere)
            printf("C'est plus ! Vous etes a %d essai(s)\n\n", compteur);
            else
            printf("Bien joue ! Vous avez trouve le nombre en %d essais", compteur);
    
          }while (nombreEntre != nombreMystere);
    
      }
    
      else if (modeDeJeu == 2)
      {
        printf("Vous avez choisi le mode multi\n\n");
        compteur = 0;
        printf("Veuillez choisir un niveau de difficulte:\n");
        printf("Joueur n.1, veuillez entrer un nombre mystere");
        scanf("%d", &nombreMystereJoueur);
        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    
    
          do
          {
            compteur++;
            printf("Entrer votre choix\n");
            scanf("%d", &nombreEntre);
    
            if (nombreEntre > nombreMystereJoueur)
            printf("C'est moins ! Vous etes a %d essai(s)\n\n", compteur);
            else if (nombreEntre < nombreMystereJoueur)
            printf("C'est plus ! Vous etes a %d essai(s)\n\n", compteur);
            else
            printf("Bien joue! Vous avez trouve le nombre en %d essai(s)\n\n", compteur);
    
          }while (nombreEntre != nombreMystereJoueur);
    
      }
    
    
     printf("Faire une nouvelle partie? 1.Oui / 0.Non\t");
     scanf("%d", &continuerPartie);
    
     }while (continuerPartie == 1);
    
    
    
    return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2017 à 18:43:28

      > Au lieu de ça, il semble qu'un nouveau nombreMystere soit généré, et cela sans fin.

      C'est en effet le cas : la boucle des lignes 50 à 65 gère les multiples essais de l'utilisateur. Or à chaque essai, un nouveau nombre mystère est généré. Pire : le générateur de nombres aléatoires est réinitialisé.

      Le générateur de nombres aléatoire doit être initialisée une seule fois, donc forcément en dehors de toute boucle. Je pense qu'il faut le faire autour de la ligne 11. Et le nombre mystère doit être initialisé avant les essais de l'utilisateur, mais après le début d'une nouvelle partie, donc avant la ligne 50 (début de la boucle des essais) et après la ligne 47 (initialisation du nombre maximum). Ne serait-ce pas plus logique ?

      -
      Edité par robun 22 septembre 2017 à 18:45:48

      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2017 à 18:43:58

        Essaye comme sa :

           do
              {
                compteur++;
                printf("Entrer votre choix\n");
                scanf("%d", &nombreEntre);
         
                if (nombreEntre > nombreMystereJoueur)
                printf("C'est moins ! Vous etes a %d essai(s)\n\n", compteur);
                else if (nombreEntre < nombreMystereJoueur)
                printf("C'est plus ! Vous etes a %d essai(s)\n\n", compteur);
         
              }while (nombreEntre != nombreMystereJoueur);
        
                printf("Bien joue! Vous avez trouve le nombre en %d essai(s)\n\n", compteur);



        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2017 à 18:54:05

          Effectivement c'est bien plus logique! Merci!
          • Partager sur Facebook
          • Partager sur Twitter

          TP Plus ou Moins. Cherchez l'erreur

          × 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