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 :

Problème de saisie d'un caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par défaut Problème de saisie d'un caractère
    Bonjour tous le monde..ce truc me rend vraiment fou !!

    je suis sous Code Blocks et voila le bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include<stdio.h>
    int main ()
    { int a;
    char b;
    printf ("first : ");
    scanf("%d",&a);
    printf("second : ");
    scanf("%c,&b);
    }
    pourquoi il me demande pas de saisir le caractère !!!!!!
    aidez moi svp !!!!!!

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour
    Et avec fflush(stdout) ?

    PS : le titre n'est pas vraiment explicite.

    PPS : la fonction main est de type int, elle doit donc retourner quelque chose, ce qui n'est pas le cas dans le code posté.

    PPPS : http://c.developpez.com/faq/?page=cl...#SCREEN_fflush

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par défaut
    je m'excuse pour le titre !!
    en tous cas meme avec fflush(stdout); et un return (0);
    ca marche encore pas !!!!!!!

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Mister Ghazi Voir le message
    je m'excuse pour le titre !!
    en tous cas meme avec fflush(stdout); et un return (0);
    ca marche encore pas !!!!!!!
    Effectivement, j'ai lu de travers.

    Le problème vient du fait que le buffer clavier est déjà rempli par un caractère : celui entré après le nombre. (\n)
    Il faut vider le buffer d'entrer.

    Voir FAQ.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    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 487
    Par défaut
    Citation Envoyé par Mister Ghazi Voir le message
    en tous cas meme avec fflush(stdout); et un return (0);
    On ne met pas de parenthèse à l'argument d'un return. Ce n'est pas une fonction.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Parce que lorsque tu entres le nombre, tu tapes la valeur suivie d'un retour chariot. Ce retour chariot reste disponible et lorsque tu demande la lecture d'un caractère, il lit ce retour chariot.
    Il faut purger le flux d'entrée avant la lecture de ce caractère.

    Ceci peut être fait
    - en demandant dans le scanf de l'entier qu'ensuite tout soit lu et ignoré jusqu'au '\n' (format %*[^\n] ) puis que celui-ci soit lu et ignoré (format %*c) : scanf("%d%*[^\n]%*c",&a); (ce qui est quant même exotique)

    - ou rechercher sur ce forum la fonction "communautaire" fclean() qui fait ce travail et l'utiliser après la lecture de l'entier et avant celle du caractère.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par défaut
    merci les gars
    en faite ca marche avec un fflush(stdin);
    je viens de l'essayer et ca marche bien !!

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Mister Ghazi Voir le message
    merci les gars
    en faite ca marche avec un fflush(stdin);
    je viens de l'essayer et ca marche bien !!
    Pur hasard. fflush() n'a un comportement défini que sur des flux de sortie, pas sur des flux d'entrée. Ca marche sur ton système, ça ne marchera pas forcément sur un autre.

Discussions similaires

  1. [2.0][C#]Problème de saisie du caractère "|"
    Par tgarcia dans le forum ASP.NET
    Réponses: 7
    Dernier message: 05/01/2007, 12h27
  2. Problème de saisie de caractères
    Par XantaX dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/12/2005, 15h37
  3. Saisie de plusieurs caractère dans une liste déroulante
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2005, 14h32
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Réponses: 1
    Dernier message: 11/10/2004, 10h47

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