Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme sur un TP

Sujet résolu
    30 mai 2006 à 19:59:11

    Bonjour à tous,

    desolé de vous déranger mais j'ai un problème sur le TP "Plus ou moins".J'ai essayé d'ameliorer le jeu et de faire le programme avec des fonctions.Mon but est d'introduire des niveaux de difficulté et d'afficher un menu demandant à l'utilisateur de choisir son niveau.

    Le code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    long afficherMenu();


    void boucle(long, long);


    long genereNombre(const long,const long);



    void compareNombre(long,long);


    int main()
    {


            switch(afficherMenu())

      {

        case 1:
        {
        long nombreEntre= 0,  nombreMystere= 0;
        const long MAX= 100, MIN= 1;

        nombreMystere= genereNombre(MAX,MIN);//Un nombre va être géneré au hasard par l'ia

        boucle(nombreEntre, nombreMystere);//on entre dans la boucle



        }
        break;


        case 2:

        {
            long nombreEntre=0, nombreMystere=0;
            const long MAX=1000, MIN=1;

          nombreMystere= genereNombre(MAX, MIN);

          boucle(nombreEntre, nombreMystere);


        }
        break;


        case 3:
        {
            long nombreEntre= 0, nombreMystere=0;
            const long MAX=10000, MIN=1;

            nombreMystere= genereNombre(MAX, MIN);

            boucle(nombreEntre, nombreMystere);
        }
        break;


        default:
        {
            printf("Vous n'avez pas entre le bon nombre veuillez recommencer");
        }

      }



    return 0;
    }



    long afficherMenu()/*Un menu est affiché demandant à l'utilisateur de choisir un niveau.
    Une fois le niveau choisi la variable niveau est renvoyé au switch du code source, c'est ici que le programme plante*/

    {
        char niveau = 0;

        printf("****Jeu du plus ou moins****\n\n");
        printf("1.Facile\n");
        printf("2.Moyen\n");
        printf("3.Difficile\n\n");

        printf("Choisissez le nombre correspondant au niveau desire: ");
        scanf("%ld", &niveau);

        return niveau;
    }



    void boucle(long nombreEntre, long nombreMystere)/*correspond à la ligne du code boucle=(nombreEntre, nombreMystere)*/
    {
        do
        {
            printf("Quel est le nombre?");
            scanf("%ld", &nombreEntre);


           compareNombre(nombreEntre, nombreMystere);

        }while(nombreEntre!=nombreMystere);

    }


    long genereNombre(const long MAX ,const long MIN)
    {
        long nombreMystere= 0;
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

        return nombreMystere;
    }
    void compareNombre(long nombreEntre, long nombreMystere)/*la fonction compare le nombre entré par l'utilisateur au nombre géneré*/
    {
        if(nombreEntre<nombreMystere)
        {
            printf("C'est plus\n");
        }
        else if(nombreEntre>nombreMystere)
        {
            printf("C'est moins\n");

        }
        else
        {
            printf("Vous avez trouve le nombre mystere\n");
        }

    }







    Le problème est qu'à la compilation il n'y a aucun problème, ensuite la fenetre de la console s'ouvre sur le menu en demandant le choix du niveau. Sauf que, quand j'entre le nombre correspondant au niveau, le programme plante et un message d'erreur s'affiche me disant que le programme a rencontré une erreur.
    Personnellement je pense que c'est au niveau du switch qu'il y a un problème mais je ne sais pas vraiment où.

    J'aimerais connaitre votre avis.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2006 à 20:10:11

      Toujours la même chanson,...

      Mettez des balises et aller lire les post-it :)
      /* Code C comme ca c'est plus clair */
      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2006 à 20:10:48

        utilise les balises codes!!


        il y a plus d'un post-it qui explique comment faire.
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2006 à 20:25:06

          Tu ne pense pas qu'on va lire ca quand même ?
          Code, code, code..
          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2006 à 9:39:21

            Il y un truc bizarre dans ton code mais je te dirais où quand tu auras mis les balises codes.
            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2006 à 11:35:16

              ça y est j'ai édité mon message, désolé pour hier c'était mon premier topic, je me suis un peu precipité



              j'aurais du regarder le post-it sur les règles du forum pour savoir comment mettre dans une balise code.
              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2006 à 12:55:08

                Pourquoi envoie-tu nbEntre en paramètres à ta fonction boucle alors que tu lui demande une fois à l'intérieur ?
                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2006 à 13:14:04

                  Dans ta fonction afficherMenu tu fait return niveau ou tu as déclaré niveau en char alors que ta fonction est sensée retourner un long
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2006 à 13:21:31

                    Citation : undefined



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

                    return nombreMystere;



                    srand(time(NULL)); ne doit être exécuté qu'une seule fois.

                    rand() tout seul ne suffit pas à généré un nombre aléatoire correct. Une solution consiste à faire :

                    double NombreAleatoire(void)
                    {
                          // nombreAleatoire doit être une variable globale
                       nombreAleatoire = (rand() * nombreAleatoire) / 147.0;
                       return nombreAleatoire;
                    }


                    tu remplaces ensuite :
                    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


                    par :
                    nombreMystere = (NombreAleatoire() % (MAX - MIN + 1)) + MIN;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mai 2006 à 13:36:26

                      J'ai trouvé mes erreurs merci à seb13, à tab et à loacast d'avoir consacré un peu de leur temps pour trouver



                      la solution à mon problème.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Probleme sur un 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