Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bug avec mon script de dès

    1 janvier 2006 à 20:36:40

    Jusque la mon script marché plutot bien mais je viens de trouver un bug. Quand on rentre un nombre tout va bien mais des que l'on rentre une lettre le programme se met a buguer. Voici mon code :

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

    int main(int argc, char *argv[])
    {
    long saisie = 0, nombreMystere = 0;
    const long MAX = 100, MIN = 1;

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

    while (nombreMystere != saisie)
    {
    printf("Entrez un nombre : ");
    scanf("%ld",&saisie);

    if (nombreMystere > saisie)
    {
    printf("\nC'est plus\n\n");
    }

    else if (nombreMystere < saisie)
    {
    printf("\nC'est moins\n\n");
    }
    }
    printf("\nravo vous avez trouvé le nombre mystere\n\n");


    system("PAUSE");
    return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      1 janvier 2006 à 20:40:40

      mais un else tout cours...
      • Partager sur Facebook
      • Partager sur Twitter
        1 janvier 2006 à 20:52:03

        C'est le scanf qui pose probleme puisqu'on demande à l'utilisateur d'entrer une donnée formatée... Pour le moment je ne sais pas faire autrement... :(
        • Partager sur Facebook
        • Partager sur Twitter
          1 janvier 2006 à 22:51:38

          Salut !!
          J'ai essayer de trouver une solution à ton problème: pas moyen. Pourtant j'ai essayer de faire que si il mettais une lettre sa lui renvoyer une erreur: pas marcher. J'ai essayé de refaire ta boucle, sa n'a rien donné. J'ai testais d'autres types d'entrée: marche plus. J'ai essayer de faire un truc comme:
          if (saisie != 1,2,3,4,...)
          printf("boulet");

          ca n'a toujours pas marcher :( donc voilà désolé. Sinon j'ai qlq peut améliorer ton code :lol:

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

          int main(int argc, char *argv[])
          {
          long nombreMystere, saisie;
          const long MAX = 100, MIN = 1;

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

          while (nombreMystere != saisie)
          {
          printf("Entrez un nombre : ");
          scanf("%ld",&saisie);

          if (nombreMystere > saisie)
          printf("\nC'est plus\n\n");

          else if (nombreMystere < saisie)
          printf("\nC'est moins\n\n");
          }
          printf("\nbravo vous avez trouvé le nombre mystere\n\n");


          system("PAUSE");
          return 0;
          }


          ++
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2006 à 8:15:27

            Citation : Ze moi

            Il fallait aller sur la FAQ: http://www.siteduzero.com/forum-83-9294-faq-c.html#r76478


            C'est pas cool lire la faq, c'est mieux poster sans chercher..
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              2 janvier 2006 à 8:19:25

              (C'est de l'ironie?)
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                2 janvier 2006 à 8:31:32

                Autre solution :

                #include <ctype.h>

                int geti()
                {
                        char c;
                        int r = 0;
                        while(isdigit((c = getchar())))
                        {
                                r = r*10;
                                r = r + (c - '0');
                        }
                        return r;
                }


                Qui s'utilisera simplement avec la forme

                int maVar;
                ...
                maVar = geti()


                Si quelqu'un veut l'améliorer, bah ok.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 janvier 2006 à 8:54:21

                  Bigloo ta fonction a exactement le meme défaut que scanf : ca laisse des caractère qui traine dans le buffer.
                  Pour ton prob tu dois faire :
                  if(scanf("%ld",&saise)!=1)
                  printf("Boulet");
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    2 janvier 2006 à 9:32:51

                    Ah bon ? Pas chez moi, j'avais testé pourtant...

                    Edit : pourtant cette version là si, en effet. Ca serait mieux comme ça :

                    #include <stdio.h>
                    #include <ctype.h>

                    int geti()
                    {
                            char c;
                            int r = 0;
                            while((c = getchar()) != '\n')
                            {
                                    if(isdigit(c))
                                    {
                                            r = r*10;
                                            r = r + (c - '0');
                                    }
                            }
                            return r;
                    }


                    non ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 janvier 2006 à 9:35:54

                      Bah tu arrete la lecture dans le buffer d'entrée quand l'user rentre une lettre, si l'utilisateur rentre "test" par exemple il restera "est" qui trainera dans le buffer :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        2 janvier 2006 à 9:39:01

                        Oui oui tu as raison (j'ai édité avant de voir ton message).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 janvier 2006 à 9:41:46

                          Bah là ca gère pas les signes, et on sait pas quand la saise a foiré :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            2 janvier 2006 à 9:44:40

                            Je sais que ça gère pas les signes oui, j'ai fait ça comme ça, pas envie de continuer.

                            Pour la gestion des erreurs par contre je vois pas ce que je pourrai faire. L'utilisateur de la fonction peut déclarer sa variable à 0 et voir si elle a toujours la même valeur après l'appel, vu que geti renvoie 0 par défaut.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 janvier 2006 à 9:59:53

                              Et si l'utilisateur a tapé 0 ?Le prog va croire que c'est une erreur ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                2 janvier 2006 à 10:39:33

                                Bon.

                                Et ça ?

                                #include <stdio.h>
                                #include <ctype.h>

                                int geti(int *ptr)
                                {
                                        char c;
                                        int r = 0, comp = 0;
                                        while((c = getchar()) != '\n')
                                        {
                                                if(isdigit(c))
                                                {
                                                        r = r*10;
                                                        r = r + (c - '0');
                                                        comp++;
                                                }
                                        }
                                        *ptr = r;
                                        return comp;
                                }

                                ça commence à faire gros pour un simple lecteur d'entier.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 janvier 2006 à 11:02:31

                                  Oui mais la plupart des zeros ne maitrisent pas les pointeurs :D
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    2 janvier 2006 à 11:07:31

                                    Citation : asmanur

                                    Oui mais la plupart des zeros ne maitrisent pas les pointeurs :D


                                    (j'me sens concerné là)
                                    mais là vous voulez enlever les restes du scanf ou faire autre chose?
                                    Si oui, voilà un code:
                                        do
                                        {
                                            tonScan = getchar();
                                        } while (scan != '\n' && scan != EOF);

                                    Si tu veux tu peux rajouter des trcs dedans (style "tu t'es trompé!")
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 janvier 2006 à 11:12:16

                                      Tu te sens concerné par tout toi, :)
                                      Son code permet, comme il l'a dit, à l'utilisateur de saisir un nombre, tout en évitant qu'il reste des détritus sur le buffer :-° , le tien permet juste de nettoyer ce meme buffer
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        2 janvier 2006 à 11:15:18

                                        Ze moi> Je veux ne pas utiliser scanf :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          2 janvier 2006 à 14:05:48

                                          Citation : asmanur

                                          Tu te sens concerné par tout toi, :)


                                          (je sais mais c'est pas de ma faute)
                                          Bigloo> Ha ok d'accord
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Bug avec mon script de dès

                                          × 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