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 :

[debutant]Probleme pour lire un char


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut [debutant]Probleme pour lire un char
    Bonjour,

    J'ai un petit probleme pour lire un char. Je codais un prog un peu long et au moment de le tester il ne fonctionnait pas comme je le souhaitais... Après une longue recherche j'ai trouvé le probleme, mais je n'arrive pas à l'expliquer ni à le résoudre

    Voici le probleme (prog grandement raccourci) : (celui ci ne fonctionne pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int nombre=0;
        char lettre='a';
     
        printf("Donnez un nombre :\n");
        scanf("%d",&nombre);
     
        printf("Donnez une lettre :\n");
        scanf("%c",&lettre);
     
        printf("Le nombre : %d , la lettre : %c\n",nombre,lettre);
     
    system("PAUSE");   
    }
    Le truc qui me turlupine c'est qu'en echangant la lecture de la lettre et du chiffre, le prog fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int nombre=0;
        char lettre='a';
     
        printf("Donnez une lettre :\n");
        scanf("%c",&lettre);
     
        printf("Donnez un nombre :\n");
        scanf("%d",&nombre);
     
        printf("Le nombre : %d , la lettre : %c\n",nombre,lettre);
     
    system("PAUSE");   
    }
    Pouvez-vous m'expliquer pourquoi en inversant la lettre et le chiffre cela fonctionne et comment faire pour que le prog fonctionne avec la demande du chiffre avant celle de la lettre....
    Pour info j'utilise Dev-C++ version 4.9.9.2

    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Problème typique du scanf, lors de l'appui de la touche sur entrée tu stockes le retour chariot (\n) dans le buffer d'entrée et ensuite quand tu refait un scanf, il prend le \n du buffer.

    Résolution

    Ou bien fabriquer tes propres fonctions d'E/S avec fgets et compagnie.

    A toi de faire ton choix.

  3. #3
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Salut

    Expliquer le comportement du premier programme, je ne peux pas.
    Je pense que stdin n'est pas vide lors du second appel de scanf, et que du coup stdin est lu avant que l'utilisateur puisse taper au clavier, mais je ne suis pas sûr.

    Par contre, ce que je sais, c'est que scanf n'est pas conseillée pour ce type d'utilisation, et qu'il faut être un expert pour utiliser correctement cette fonction qui donne très souvent un comportement indéfini comme dans le cas de ton premier programme.

    Pour des saisies sûres au clavier, construction de fonctions adaptées :

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Merci pour vos réponses, j'ai compris le probleme.

    Je vais voir avec fgets.

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

Discussions similaires

  1. [debutant] probleme pour lancer sql
    Par tomsoyer dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/08/2004, 18h29
  2. [Debutant]Probleme pour Debugger sours JCreator
    Par Flam dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 1
    Dernier message: 12/05/2004, 19h27
  3. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21
  4. Probleme pour lire un fichier Ini
    Par Sebinou dans le forum C++Builder
    Réponses: 11
    Dernier message: 10/03/2004, 23h22
  5. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29

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