Partage
  • Partager sur Facebook
  • Partager sur Twitter

Premier tp du cours : décalage d'un coup

Sujet résolu
    8 février 2006 à 19:43:22

    Salut

    J'ai programmé le petit jeu proposé sans regarder le corrigé... mais je comprend pas pourquoi il marche pas... En fait, il analyse le chiffre donné au tour d'avant Au premier tour, il affiche donc rien... bizarre... d'où vient mon erruer svp ?

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

    int main(int argc, char *argv[])
    {
      const long MAX = 100, MIN = 1;
     
      long nombreMystere = 0, nombreJoueur = 0;
     
      srand(time(NULL));
      nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
      while (nombreJoueur != nombreMystere)
    {
        printf("Entre un nombre : ");
        scanf("%ld \n", &nombreJoueur);
       
        if (nombreJoueur > nombreMystere)
           printf ("Trop grand...\n\n");

        else if (nombreJoueur < nombreMystere)
             printf ("Trop petit...\n\n");
        else
            printf("Bravo, le nombe mystere etait le %ld, tu as gagne !!!!\n\n", nombreMystere);
    }

      system("PAUSE");     
      return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2006 à 19:45:54

      fait plutot une boucle do.... while, au moins celle-ci s'executera au moins une fois :)
      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2006 à 19:47:27

        J'avais eu le meme problème que toi...mais bon je l'ai réglé...par contre je ne sais plus comment mdr (desolé)
        • Partager sur Facebook
        • Partager sur Twitter
          8 février 2006 à 19:55:43

          merci de ton aide shigeru :p:p

          Pour Giovanni, justement, je veux résoudre mon problème, en le comprenant. Donc, pas tout changer ;) (surtout qu'une boucle while me semble tout autant adapté qu'un do while (vu que la variable est initialisé à 0...)
          • Partager sur Facebook
          • Partager sur Twitter
            8 février 2006 à 20:12:26

            Hello,
            Voilà je début aussi dans le monde du C et il m'a fallu un petit moment pour trouvé le problème.
            Je crois que s'est dans ton scanf tu as mis un retour à la ligne et il aime pas.
            Bonne soirée ++
            P.S.
            Je trouve la do while plus propre


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

            int main(int argc, char *argv[])
            {
              const long MAX = 100, MIN = 1;
             
              long nombreMystere = 0, nombreJoueur = 0;
             
              srand(time(NULL));
              nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
             
            while (nombreJoueur != nombreMystere)
            {
                printf("Entre un nombre : ");
                scanf("%ld", &nombreJoueur);
               printf("\n");
                if (nombreJoueur > nombreMystere)
                   printf ("Trop grand...\n\n");

                else if (nombreJoueur < nombreMystere)
                     printf ("Trop petit...\n\n");
                else
                    printf("Bravo, le nombe mystere etait le %ld, tu as gagne !!!!\n\n", nombreMystere);
            }

              system("PAUSE");     
              return 0;
            }
            • Partager sur Facebook
            • Partager sur Twitter
              8 février 2006 à 20:25:38

              Au début, tu initialise numbreJoueur = 0 et nombreMystere = 0. Ensuite tu demande de faire la boucle tant que nombreJoueur est différent de nombreMystere (les deux variables sont toujours égales à zero n'oublie pas). Donc programme ne passe par la boucle, car la condition renvoie false (0 == 0). C'est pourquoi tu devrait faire un

              do
              {
                  printf("Entre un nombre : ");
                  scanf("%ld", &nombreJoueur);
                 printf("\n");
                  if (nombreJoueur > nombreMystere)
                     printf ("Trop grand...\n\n");

                  else if (nombreJoueur < nombreMystere)
                       printf ("Trop petit...\n\n");
                  else
                      printf("Bravo, le nombe mystere etait le %ld, tu as gagne !!!!\n\n", nombreMystere);
              }while(nombreJoueur != nombreMystere)
              • Partager sur Facebook
              • Partager sur Twitter
                8 février 2006 à 20:57:45

                En gros ca donne ca ;)

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

                int main(int argc, char *argv[])
                {
                  const long MAX = 100, MIN = 1;
                 
                  long nombreMystere = 0, nombreJoueur = 0;
                 
                  srand(time(NULL));
                  nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                 
                 do
                    {
                    printf("Entre un nombre : ");
                    scanf("%ld", &nombreJoueur);
                   printf("\n");
                    if (nombreJoueur > nombreMystere)
                       printf ("Trop grand...\n\n");

                    else if (nombreJoueur < nombreMystere)
                         printf ("Trop petit...\n\n");
                    else
                        printf("Bravo, le nombe mystere etait le %ld, tu as gagne !!!!\n\n", nombreMystere);
                             } while (nombreJoueur != nombreMystere);

                  system("PAUSE");     
                  return 0;
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  8 février 2006 à 21:00:41

                  Hello,
                  JFGagnon ton résonnement sur la do while est juste. Mais il fait quand même la boucle car nobreMystere n'est plu = 0 car il y a déjà eu le générateur de nombre pseudo aléatoire.
                  Bonne soirée
                  ++ et bonne programmation
                  P.S.
                  XavierWRC si tu es nouveau dans le monde du C comme moi on peut se lancer des défit pour se motivé. Car des fois j'ai un peu la flemme.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 février 2006 à 23:08:19

                    Lit ce tuto sur les nombres aléatoires :
                    http://www.siteduzero.com/tuto-3-2425-1-les-nombres-aleatoires-en-c-c.html
                    Le problème vient du fait que la division est entière avec le c et donc rand()%machin donne zero avec ton code !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 février 2006 à 17:07:54

                      Etle grand gagnant est leclaude !!!! Merci à toi !!! Effectivement, il n'apprécie pas les \n dans les scanf... c'est bon à savoir !
                      Sinon, oui, je débute dans le monde du c... Là, je vais attaquer les pointeurs... mais l'intro de mateo m'a décidé à attendre un jour où je suis plus réveillé :lol::lol: Pour des petits défis, ça pourrait être sympa, entre tout les débutants, de se donner des petits programmes à faire en attendant la suite des cours. Ca permettrait de s'entrainer de façon sympa, et après on pourra comparer notre résultat avec celui des autres.

                      Pour JFGagnon, la boucle fonctionne obligatoirement une fois, car mon rand donne un chiffre entre 1 et 100. Donc, il ne peut être égal à 0, et est donc différent de nombreJoueur. ;)

                      Et sinon, moi, j'aime pas la do while o_O Alors, ma while est peut etre moins propre, mais je la trouve pas si vilaine que ça :D


                      • Partager sur Facebook
                      • Partager sur Twitter

                      Premier tp du cours : décalage d'un coup

                      × 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