IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

erreur bizarre avec scanf :-(


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut erreur bizarre avec scanf :-(
    Bonjour tous,
    voici mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    printf("ENTRER UN ENTIER\n");
    scanf("%d", &a);
    printf("vous avez rentre la valeur %d\n", a);
    printf("ENTRER UN DECIMAL\n");
    scanf("%lf", &b);
    printf("vous avez rentre la valeur %f\n", b);

    1°) si je rentre un entier et ensuite un decimal tous se passe bien!


    2°) par contre si je rentre un decimal lorsqu'on me demande un entier par exemple 2,5 j'ai ce probleme:

    la variable a prends la valeur 2 (normal) mais la variable b prends automatiquement la valeur 0,4 sans que j'ai rentré quelque chose pour la secondes variables...

    D'où vient ce probleme?? comment dois je faire si je veux rentrer un 2nd nombre pour le decimal ?

    merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Bonsoir,

    scanf() ne doit pas prendre en compte le retour à la ligne. Sur l'expression « 2,5 », le premier scanf() doit interpréter « 2 » et s'arréter là car ce qui suit n'est plus un chiffre. Le second doit ensuite lire ce qu'il trouve, soit « ,5 », qui est toujours dans le tampon.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonsoir,

    scanf() ne doit pas prendre en compte le retour à la ligne. Sur l'expression « 2,5 », le premier scanf() doit interpréter « 2 » et s'arréter là car ce qui suit n'est plus un chiffre. Le second doit ensuite lire ce qu'il trouve, soit « ,5 », qui est toujours dans le tampon.
    d'accord merci,
    pour contourner ce problème il faut donc ne pas faire d'erreur dans la déclaration des variables..

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    d'accord merci,
    pour contourner ce problème il faut donc ne pas faire d'erreur dans la déclaration des variables..
    D'une part, oui, car tu ne nous as pas donné la ligne où tu les déclares.

    Mais ce n'est pas la cause de ton problème, ici : l'erreur vient du fait que scanf() ne lit que ce dont il a besoin. Comme tu as dit à ton premier scanf() lit un entier, il s'arrête juste avant la virgule ou autre caractère qui ne participe pas à représenter l'entier. Le reste des caractères reste donc dans le buffer.

    Le scanf() suivant lit donc l'entrée standard comme le premier, et comme celle-ci n'est pas vide (il y reste la fin de l'expression précédente), il exploite ce qu'il reçoit. Et il se trouve que « ,5 » est une expression valide en informatique. Donc, en plus de tes variables, ce sont surtout les paramètres que tu passes à scanf() qu'il faut bien contrôler (« %d » et « %lf »).

    Si tu ne veux pas avoir d'ennuis, commence plutôt par lire une chaîne entière avec fgets() dans un buffer, puis convertis son contenu avec strtol() ou strtod().

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci beaucoup Obsidian pour ces complements

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur bizarre avec mechanize
    Par Invité dans le forum Réseau/Web
    Réponses: 14
    Dernier message: 15/11/2010, 10h19
  2. Une erreur bizarre avec les InputStream
    Par Lyuna dans le forum Général Java
    Réponses: 5
    Dernier message: 05/02/2010, 11h14
  3. Erreur bizarre avec sprintf
    Par Chozac dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 03/12/2007, 15h53
  4. Ecran bleu avec Messages d'erreur bizarres ?
    Par masta64 dans le forum Windows XP
    Réponses: 5
    Dernier message: 04/11/2006, 14h25
  5. Erreur bizarre avec le module DBI
    Par Jim_Nastiq dans le forum SGBD
    Réponses: 7
    Dernier message: 12/04/2006, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo