Partage
  • Partager sur Facebook
  • Partager sur Twitter

[annexe saisie de texte sécurisée] Problème pour strtol

Impossible de rentrer un nombre de plus de 9 chiffres

Sujet résolu
    13 août 2008 à 19:14:22

    Bonjour, je viens de lire l'annexe "La saisie de texte sécurisée" et j'ai fait la fonction pour pouvoir lire un long (vers la fin).
    Mais j'ai un problème (la vie serait morne sinon...) : quand je rentre un nombre qui comporte plus de 9 chiffres, on m'affiche ensuite un nombre tout à fait différent (et aléatoire (fin je crois, en tout cas il change à chaque fois :p ))...Mais si le nombre a 9 chiffres ou moins, ça marche parfaitement. Je voulais donc savoir comment résoudre ce problème parce que c'est assez gênant...
    je remets les différentes fonctions :

    long lireLong()
    {
        char nombreTexte[100] = {0}; // 100 cases devraient suffire
     
        if (lire(nombreTexte, 100))
        {
            // Si lecture du texte ok, convertir le nombre en long et le retourner
            return strtol(nombreTexte, NULL, 10);
        }
        else
        {
            // Si problème de lecture, renvoyer 0
            return 0;
        }
    }
    



    int lire(char *chaine, int longueur)
    {
        char *positionEntree = NULL;
     
        if (fgets(chaine, longueur, stdin) != NULL)
        {
            positionEntree = strchr(chaine, '\n');
            if (positionEntree != NULL)
            {
                *positionEntree = '\0';
            }
            else
            {
                viderBuffer();
            }
            return 1;
        }
        else
        {
            viderBuffer();
            return 0;
        }
    }
    



    void viderBuffer()
    {
        int c = 0;
        while (c != '\n' && c != EOF)
        {
            c = getchar();
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 19:33:47

      Citation : Coucousalut

      Bonjour, je viens de lire l'annexe "La saisie de texte sécurisée" et j'ai fait la fonction pour pouvoir lire un long (vers la fin).
      Mais j'ai un problème (la vie serait morne sinon...) : quand je rentre un nombre qui comporte plus de 9 chiffres, on m'affiche ensuite un nombre tout à fait différent (et aléatoire (fin je crois, en tout cas il change à chaque fois :p ))...Mais si le nombre a 9 chiffres ou moins, ça marche parfaitement. Je voulais donc savoir comment résoudre ce problème parce que c'est assez gênant...


      La valeur max d'un long est LONG_MAX définie dans <limits.h>
      #include <stdio.h>
      #include <limits.h>
      
      int main (void)
      {
         printf ("LONG_MAX = %ld\n", LONG_MAX);
         return 0;
      }
      

      soit sur mon implémentation :
      LONG_MAX = 2147483647
      
      Process returned 0 (0x0)   execution time : 0.033 s
      Press any key to continue.

      soit 10 chiffres en décimal. :
      #include <stdio.h>
      #include <stdlib.h>
      #include <limits.h>
      
      int main (void)
      {
         printf ("LONG_MAX = %ld\n", LONG_MAX);
      
         {
            char s[20];
            fgets (s, sizeof s, stdin);
            {
               long val = strtol (s, NULL, 10);
               printf ("val = %ld\n", val);
            }
         }
         return 0;
      }
      

      donne :
      LONG_MAX = 2147483647
      2147483647
      val = 2147483647
      
      Process returned 0 (0x0)   execution time : 23.621 s
      Press any key to continue.

      Il n'y a donc pas de problème pour entrer la valeur mas possible d'un long... Si problème il y a, il est ailleurs.

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        13 août 2008 à 19:36:17

        Ah ok, merci beaucoup, je pensais juste qu'un long était plus grand...
        Fin bon, problème résolu.
        • Partager sur Facebook
        • Partager sur Twitter

        [annexe saisie de texte sécurisée] Problème pour strtol

        × 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