Partage
  • Partager sur Facebook
  • Partager sur Twitter

génération aléatoire

réinitialisation erronée...

    21 avril 2006 à 17:56:24

    bonjour à tous,
    je suis arrivé au premier TP du cours de C avec le petit jeu du nombre mystère, et j'y suis arrivé sans trop de problêmes...tout content que j'étais, je me suis dit que j'allais lui apporter tout plein de modifications comme indiqué à la fin du TP, ce que j'ai fait!
    j'ai donc ajouté un compteur...ça pas de problêmes...
    mais lorsque j'ai voulu ajouter un menu pour régler la difficultée...alors ça grosse galère!! :colere:
    j'ai mit 3 niveau de difficultées:
    1er niveau: le code génère un nombre entre 1 et 10.
    2eme niveau: entre 1 et 100
    et 3eme niveau: entre 1 et 1000
    j'ai donc fait 3 variables:
    MAX 1, MAX 2, et MAX 3 que je modifie dans le code lorsque je demande de générer le nombre aléatoire...
    mais le problême est que quoi que j'entre comme niveau (1, 2, ou 3), le nombre généré est toujours compris entre 1 et 10 quelque soit la variable que je déclare dans le code pour le générer!! o_O
    voici donc mon code:

    Citation : code

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


    int main(int argc, char *argv[])
    {

    //déclaration des variables
    const long MIN = 1, MAX1 = 10, MAX2 = 100, MAX3 = 1000;
    long NombreMystere = 0, Essai = 0, Compteur = 1, Niveau = 0</couleur>;

    //titre du jeu<couleur nom="rouge"/>
    printf (" ~~~~ LE NOMBRE MYSTERE ~~~~\n\n\n");

    //menu de difficultée
    printf ("- [1] : nombre de 1 a 10\n");
    printf ("- [2] : nombre de 1 a 100\n");
    printf ("- [3] : nombre de 1 a 1000\n");
    printf ("choisissez un niveau de difficulte: ");
    scanf ("%ld", &Niveau);
    printf ("\n");

    //recherche du nombre mystere
    //niveau 1

    if (Niveau = 1)
    {
    srand(time(NULL));
    NombreMystere = (rand( ) % (MAX1 - MIN + 1)) + MIN;
    while (Essai != NombreMystere)
    {
    printf (" ==Coup %ld==\n", Compteur);
    printf ("Quel est le nombre ? ");
    scanf ("%ld", &Essai);
    Compteur++;
    if (Essai < NombreMystere)
    {
    printf ("C'est plus!\n\n");
    }
    else if (Essai > NombreMystere)
    {
    printf ("C'est moins!\n\n");
    }
    else
    {
    printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
    }
    }
    }

    //niveau 2
    if (Niveau = 2)
    {
    srand(time(NULL));
    NombreMystere = (rand( ) % (MAX2 - MIN + 1)) + MIN;
    while (Essai != NombreMystere)
    {
    printf (" ==Coup %ld==\n", Compteur);
    printf ("Quel est le nombre ? ");
    scanf ("%ld", &Essai);
    Compteur++;
    if (Essai < NombreMystere)
    {
    printf ("C'est plus!\n\n");
    }
    else if (Essai > NombreMystere)
    {
    printf ("C'est moins!\n\n");
    }
    else
    {
    printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
    }
    }
    }

    //niveau 3
    if (Niveau = 3)
    {
    srand(time(NULL));
    NombreMystere = (rand( ) % (MAX3 - MIN + 1)) + MIN;
    while (Essai != NombreMystere)
    {
    printf (" ==Coup %ld==\n", Compteur);
    printf ("Quel est le nombre ? ");
    scanf ("%ld", &Essai);
    Compteur++;
    if (Essai < NombreMystere)
    {
    printf ("C'est plus!\n\n");
    }
    else if (Essai > NombreMystere)
    {
    printf ("C'est moins!\n\n");
    }
    else
    {
    printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
    }
    }
    }

    else
    {
    printf (3veuillez entrer un nombre entre 1 et 3!!\n3<couleur nom="rouge">
    );
    }

    system("PAUSE");
    return 0;
    }



    voilà donc...ça fait des heures que je me torture l'esprit à tenter de comprende ce qui ne va pas...
    je sais que mon code ne doit pas être vraiment parfait...mais j'ai débuté il y a 3 jours seulement^^
    merci donc à l'avance, et aussi d'épargner ma boite de doliprane!! :p
    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2006 à 18:02:19

      Au lieu de faire 3 variable MAX fait en qu'une seule que tu initialise apres le choix du niveau.
      • Partager sur Facebook
      • Partager sur Twitter
        21 avril 2006 à 18:29:06

        j'ai tenté mais ça ne fonctionne pas non plus... o_O
        je déclare une seule variable au départ que je change pour chaque niveau...mais ça change rien...
        de plus, je viens de me rendre compte que si je tappe un chiffre au delà de 3 dans le choix du niveau, il me demande quand même d'écrire un nombre!!
        qui bien entendu se situe entre 1 et 10!! :-°
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2006 à 18:31:47

          Dans les conditions, tu ne mets qu'un signe = au lieu de deux. Ce doit être la source du problème.
          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2006 à 18:35:45

            Tout à fait à part, tu t'es un peu fait chier pour rien. C'est bien d'avoir essayé de colorer le code à la main, mais on a codé des scripts qui le font automatiquement à la place, ça va plus vite ^^

            N'utilise pas la balise < citation> mais plutôt la balise < code> à la place. Tu verras, c'est mieux :D
            • Partager sur Facebook
            • Partager sur Twitter

            If you'd like to join us, read "How do we work at OpenClassrooms"! :)

              21 avril 2006 à 18:39:15

              Citation : Docteur

              MAX 1, MAX 2, et MAX 3 que je modifie dans le code lorsque je demande de générer le nombre aléatoire...
              mais le problême est que quoi que j'entre comme niveau (1, 2, ou 3), le nombre généré est toujours compris entre 1 et 10 quelque soit la variable que je déclare dans le code pour le générer!! o_O
              voici donc mon code:


              <couleur nom="vertf">#include <stdio.h>
              #include <stdlib.h>
              #include <time.h></couleur>



              Mais je rève ! Tu as passé combien de temps à colorier le code ? Tu n'a pas lu les regles du forum ? La balise code "c" fait ça automatiquement !

              Citation : Docteur


              srand(time(NULL));
              NombreMystere = (rand( ) % (MAX3 - MIN + 1)) + MIN;

              Problème récurrent. srand() doit être appelé une seule fois au début du code...
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                21 avril 2006 à 18:42:39

                merci M@teo21 pour ces indications!!
                je me disais aussi que tous les membres du forum avaient une patience infinie pour colorer leur code à chaque fois aussi!! :D
                j'en profite au passage pour te remercier pour ces cours si bien faits qui me permettent d'avancer si vite...parce que avec mon bouquin du C, j'avais un peu plus de mal à rester accroché^^

                en ce qui concerne les conditions, bah je n'ai mit qu'un seul "="...
                je pense que l'erreur ne vient pas le là donc...

                Edite: oui -ed-...j'ai du zapper la partie où on parlait de la coloration...pourtant j'ai lu les règles...ce qui est encore pire.. :p
                par contre je ne savais pas qu'on ne devait appeler qu'une seule fois srand()!!
                je vais donc modifier le code pour arranger ça!!
                merci beaucoup!! :)
                • Partager sur Facebook
                • Partager sur Twitter
                  21 avril 2006 à 18:47:10

                  Justement, c'est ce que je voulais dire : dans les conditions, tu dois mettre deux "=". :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 avril 2006 à 18:51:31

                    je vais me décider à mettre mes lunettes...ça peux plus durer... :euh:
                    merci beaucoup Timon!!

                    Edit: bon...j'ai changé tout ça...et nouveau problême!!
                    maintenant le programme bug et me renvoie une erreur de windows dés que je code arrive au moment de générer le chiffre aléatoire!! :o
                    voici mon code qui pourtant m'a l'air à peu prêt bon:

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

                    int main(int argc, char *argv[])
                    {

                    //déclaration des variables
                    const long MIN = 1;
                    long MAX = 10;
                    long NombreMystere = 0, Essai = 0, Compteur = 1, Niveau = 0;

                    //génération aléatoire
                    srand(time(NULL));
                    NombreMystere = (rand( ) % (MAX - MIN + 1)) + MIN;

                    //titre du jeu
                    printf (" ~~~~ LE NOMBRE MYSTERE ~~~~\n\n\n");

                    //menu de difficultée
                    printf ("- [1] : nombre de 1 a 10\n");
                    printf ("- [2] : nombre de 1 a 100\n");
                    printf ("- [3] : nombre de 1 a 1000\n");
                    printf ("choisissez un niveau de difficulte: ");
                    scanf ("%ld", &Niveau);
                    printf ("\n");

                    //recherche du nombre mystere
                    //niveau 1
                    if (Niveau == 1)
                    {
                    MAX = 10;
                    while (Essai != NombreMystere)
                    {
                      printf (" ==Coup %ld==\n", Compteur);
                      printf ("Quel est le nombre ? ");
                      scanf ("%ld", &Essai);
                      Compteur++;
                    if (Essai < NombreMystere)
                      {     
                        printf ("C'est plus!\n\n");
                          }
                    else if (Essai > NombreMystere)
                      {
                        printf ("C'est moins!\n\n");
                          }
                    else
                      {
                        printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                          }
                            }
                              }

                    //niveau 2
                    else if (Niveau == 2)
                    {
                    MAX = 100;
                    while (Essai != NombreMystere)
                    {
                      printf (" ==Coup %ld==\n", Compteur);
                      printf ("Quel est le nombre ? ");
                      scanf ("%ld", &Essai);
                      Compteur++;
                    if (Essai < NombreMystere)
                      {     
                        printf ("C'est plus!\n\n");
                          }
                    else if (Essai > NombreMystere)
                      {
                        printf ("C'est moins!\n\n");
                          }
                    else
                      {
                        printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                          }
                            }
                              }         

                    //niveau 3
                    else if (Niveau == 3)
                    {
                    MAX = 1000;
                    while (Essai != NombreMystere)
                    {
                      printf (" ==Coup %ld==\n", Compteur);
                      printf ("Quel est le nombre ? ");
                      scanf ("%ld", &Essai);
                      Compteur++;
                    if (Essai < NombreMystere)
                      {     
                        printf ("C'est plus!\n\n");
                          }
                    else if (Essai > NombreMystere)
                      {
                        printf ("C'est moins!\n\n");
                          }
                    else
                      {
                        printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                          }
                            }
                              }
                             
                    else
                    {
                      printf ("veuillez entrer un nombre entre 1 et 3!!\n");
                        }

                      system("PAUSE");     
                      return 0;
                    }


                    EDIT 2: je viens de m'appercevoir que "MAX" ne pouvait pas être déclaré à "0" au départ...
                    j'ai donc changé le "0" en "10" mais le problême initial reste...le nombre génré se trouvr toujours compris entre 1 et 10 quelque soit le niveau...
                    le prog ragit comme si j'avais indiqué "const long MAX = 1;" au lieu de "long" tout court... :colere:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 avril 2006 à 19:21:01

                      Le calcul du nombre mystère devrait se placer dans les conditions ; non avant.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 avril 2006 à 19:39:51

                        merci Timon...ta remarque à résolue mon problême!!! ;)
                        voici le code et tout marche parfaitement apparment!! :)

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

                        int main(int argc, char *argv[])
                        {

                        //déclaration des variables
                        const long MIN = 1;
                        long MAX = 10;
                        long NombreMystere = 0, Essai = 0, Compteur = 1, Niveau = 0;

                        //génération aléatoire

                        //titre du jeu
                        printf (" ~~~~ LE NOMBRE MYSTERE ~~~~\n\n\n");

                        //menu de difficultée
                        printf ("- [1] : nombre de 1 a 10\n");
                        printf ("- [2] : nombre de 1 a 100\n");
                        printf ("- [3] : nombre de 1 a 1000\n");
                        printf ("choisissez un niveau de difficulte: ");
                        scanf ("%ld", &Niveau);
                        printf ("\n");

                        //recherche du nombre mystere
                        //niveau 1
                        if (Niveau == 1)
                        {
                        MAX = 10;
                        srand(time(NULL));
                        NombreMystere = (rand( ) % (MAX - MIN + 1)) + MIN;
                        while (Essai != NombreMystere)
                        {
                          printf (" ==Coup %ld==\n", Compteur);
                          printf ("Quel est le nombre ? ");
                          scanf ("%ld", &Essai);
                          Compteur++;
                        if (Essai < NombreMystere)
                          {     
                            printf ("C'est plus!\n\n");
                              }
                        else if (Essai > NombreMystere)
                          {
                            printf ("C'est moins!\n\n");
                              }
                        else
                          {
                            printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                              }
                                }
                                  }

                        //niveau 2
                        else if (Niveau == 2)
                        {
                        MAX = 100;
                        srand(time(NULL));
                        NombreMystere = (rand( ) % (MAX - MIN + 1)) + MIN;
                        while (Essai != NombreMystere)
                        {
                          printf (" ==Coup %ld==\n", Compteur);
                          printf ("Quel est le nombre ? ");
                          scanf ("%ld", &Essai);
                          Compteur++;
                          MAX = 100;
                        if (Essai < NombreMystere)
                          {     
                            printf ("C'est plus!\n\n");
                              }
                        else if (Essai > NombreMystere)
                          {
                            printf ("C'est moins!\n\n");
                              }
                        else
                          {
                            printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                              }
                                }
                                  }         

                        //niveau 3
                        else if (Niveau == 3)
                        {
                        MAX = 1000;
                        srand(time(NULL));
                        NombreMystere = (rand( ) % (MAX - MIN + 1)) + MIN;
                        while (Essai != NombreMystere)
                        {
                          printf (" ==Coup %ld==\n", Compteur);
                          printf ("Quel est le nombre ? ");
                          scanf ("%ld", &Essai);
                          Compteur++;
                          MAX = 1000;
                        if (Essai < NombreMystere)
                          {     
                            printf ("C'est plus!\n\n");
                              }
                        else if (Essai > NombreMystere)
                          {
                            printf ("C'est moins!\n\n");
                              }
                        else
                          {
                            printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", Compteur-1);
                              }
                                }
                                  }
                                 
                        else
                        {
                          printf ("veuillez entrer un nombre entre 1 et 3!!\n");
                            }

                          system("PAUSE");     
                          return 0;
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter

                        génération aléatoire

                        × 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