Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours langage C de M. Nebra

Jeux plus ou moins, problème avec choix difficulte

Sujet résolu
    16 juin 2019 à 17:16:06

    Bonjour, 

    Je suis en train de réaliser le jeux du plus amélioré du cours sur le langage C de M. Nebra.

    Après plusieurs tentatives, je ne réussi toujours pas à y ajouter le choix de la difficulté. 

    En effet, lorsque je lance le programme, une fois que le joueur entre le choixDifficulte, le programme s'arrête.

    Pourriez-vous m'indiquer ce qui cloche dans mon programme s'il vous plait ?

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        int nombreMystere = 0, nombreEntre = 0, choixDifficulte = 0, nombreMax = 100;
        const int MIN = 1;
    
        srand(time(NULL));
    
        printf("\n");
        printf("\t!!!!!-------------------LE JEUX DU PLUS OU MOINS--------------------!!!!!\n\n\n");
    
        // Explication du jeux.
    
        printf("\tLe but du jeux est de deviner le nombre mystere en un minimum de tours\n\n");
    
        // Choix de la difficulté
    
        printf("\tChoisi le niveau de difficulte de la partie :\n\n");
    
        printf("\t\t1. Facile\n");
        printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
    
        printf("\t\t1. Moyen\n");
        printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
    
        printf("\t\t1. Difficile\n");
        printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
    
        // Le joueur entre son niveau de difficulte. En fonction de son choix, le programme ajuste la variable nombreMax.
        do
        {
            printf("\tVotre choix : ");
            scanf("%d", choixDifficulte);
            switch(choixDifficulte)
            {
            case 1:
                nombreMax = 100;
                nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
                break;
            case 2:
                nombreMax = 1000;
                nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
                break;
            case 3:
                nombreMax = 10000;
                nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
                break;
            }
        }
        while(choixDifficulte < 1 || choixDifficulte > 3);
        do
        {
            printf("\tEntre un nombre :");
            scanf("%d", &nombreEntre);
            printf("\n\n");
    
            if(nombreEntre < nombreMystere)
            {
                printf("C'est plus !\n");
                printf("Essaie encore !\n\n");
            }
            else if (nombreEntre > nombreMystere)
            {
                printf("C'est moins !\n");
                printf("Essaie encore !\n\n");
            }
            else
            {
                printf("Felicitation !!! Tu as trouve le nombre mystere !!\n");
                printf("Le nombre mystere est bien le %d !", nombreMystere);
            }
        }
        while (nombreEntre != nombreMystere);
    
        return 0;
    }
    
    



    -
    Edité par Novice_123 16 juin 2019 à 17:18:28

    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2019 à 17:54:30

      Salut !

      A la ligne 36, tu as oublié tu as oublié le "&" devant "choixDifficulte"

      Tu devrais donc plutôt écrire :

      scanf("%d", &choixDifficulte);
      
      //au lieu de :
      
      scanf("%d", choixDifficulte);

       Sinon, de la ligne 23 à 30, tu as écris :

          printf("\t\t1. Facile\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
       
          printf("\t\t1. Moyen\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
       
          printf("\t\t1. Difficile\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
      
      //au lieu de
      
          printf("\t\t1. Facile\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
       
          printf("\t\t2. Moyen\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
       
          printf("\t\t3. Difficile\n");
          printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
      
      //c'est juste les chiffres que tu avais mis à 1 




      Bonne fin de journée ;)

      -
      Edité par Le_Wasabi_Ca_Pik' 16 juin 2019 à 18:01:12

      • Partager sur Facebook
      • Partager sur Twitter

      "Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-

        16 juin 2019 à 18:05:37

        Il faut que tu apprennes à détecter les erreurs. C'est une enquête, parfois une longue enquête. Il y a trois étapes : 1° situer l'erreur (à quelle ligne ?), 2° comprendre pourquoi c'est une erreur, 3° rectifier.

        Là, par exemple, tu dis que le programme s'arrête. En fait, soit il s'arrête vraiment juste après la saisie (interruption), soit c'est juste qu'il ne rentre pas dans les deux boucles do... while. Tu peux le vérifier en ajoutant une ligne de contrôle dans chacune des deux boucles, genre :

        printf("Coucou 1 !\n") ;

        S'il n'affiche pas les « coucous », c'est qu'en effet il ne va pas dans les deux boucles. Mais si ajoutes une ligne similaire juste avant le « return 0 », tu verras qu'elle s'affiche, elle : ça prouve que le programme ne s'interrompt pas, c'est juste qu'il ne rentre pas dans les deux boucles. Pour savoir pourquoi, il faut afficher la valeur qui sert au test d'entrée, c'est-à-dire choixDifficulte. Donc juste avant la première boucle (et après la saisie), tu mets :

        printf("choixDifficilte = %d \n", choixdifficulte) ;
        

        et tu constateras que cette variable n'a pas la valeur prévue. Ça permet de situer le problème (étape 1) : il y a une erreur lors de la saisie.

        Ensuite, soit tu vois immédiatement que tu avais oublié le & et tu rectifies, soit tu ne le vois pas et là c'est plus embêtant...

        -
        Edité par robun 16 juin 2019 à 18:12:41

        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2019 à 19:50:45

          Pour Le_Wasabi_Ca_Pik' 



          Merci pour avoir détecter l'erreur, c'est très sympa !

          Pour robun 

          Merci beaucoup pour ces conseils, je ne connaissais pas ces méthodes pour détecter les erreurs. Cela va m'être très utile pour continuer ma progression.





          -
          Edité par Novice_123 16 juin 2019 à 19:55:09

          • Partager sur Facebook
          • Partager sur Twitter

          Cours langage C de M. Nebra

          × 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