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 "fscanf"


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut problème de "fscanf"
    Bonjour,

    je ne comprend pas pourquoi un des "fscanf" de mon code ne fonctionne pas.
    Voici le code :
    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
    20
    21
    22
    23
    24
    #include <stdio.h>
    
    int main(void)
    {
       char codeFichier,codeIndex;
       char cle[20];
       fprintf(stdout, "Hello World !!");
       fprintf(stdout, "\nEntrez le code fichier : ");
       fscanf(stdin, "%c",&codeFichier);
       fprintf(stdout,"Code fichier : %c",codeFichier);
    
       fprintf(stdout, "\nEntrez le code index : ");
       fscanf(stdin, "%c",&codeIndex);
       fprintf(stdout,"Code index : %c",codeIndex);
    
       fprintf(stdout, "\nEntrez la cle recherchee : ");
       fscanf(stdin,"%s",&cle);
       fprintf(stdout,"Cle recherchee : %s",cle);
    
       fprintf(stdout,"\nSaisie terminee");
    
    	return 0;
    }
    Il s'agit du code en gras qui ne "fonctionne pas", voici le resultat de l'éxecution :
    Hello World !!
    Entrez le code fichier : L
    Code fichier : L
    Entrez le code index : Code index :

    Entrez la cle recherchee : dup
    Cle recherche : dup
    Saisie terminee


    Le programme ne me laisse pas entrer la valeur du code index, le code du "fscanf" coresspondant ne fonctionne pas, il passe directement à l'instructon suivante : fprintf(stdout,"Code index : %c",codeIndex); sans que j'ai le tps d'entrer la valeur du code index...

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Lorsque tu rentres ton premier caractère, tu places dans le buffer d'entrée ton caractère ici 'L' et le retour chariot \n (quand tu appui sur la touche Entrée). Ton caractère 'L' est placé dans ta variable, le \n reste quant à lui dans le buffer.

    Lors du second appel a fscanf, il prend directement le caractère dans le buffer (i.e le \n) sans que tu puisses avoir la main.

    Solution : vider le buffer d'entrée après chaque saisie (pas avec fflush hein ).

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Comme d'habitude avec scanf(). Tu demandes de lire _un_ caractere. Mais combien en tapes-tu? Deux: la caractere et entree. A la premiere lecture, le caractere est lu et entree reste dans le tampon. A la deuxieme lecture, il lit cet entree et ignore ton deuxieme caractere. Solution: utiliser correctement *scanf() [il y a un tutorial quelque part sur ce site] ou passer a fgets() [quelques zillions de posts du forum C en parlent].

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    Merci beaucoup, ça fonctionne...

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stdin,"%s",&cle);
    Pas de '&' devant un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(stdin,"%s",cle);

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Skyrunner
    pas avec fflush hein .
    Sous Windows, non portable:
    après chaque saisie.

  7. #7
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par seriousme
    Sous Windows, non portable:
    après chaque saisie.
    Si c'est non-portable, ça sert à quoi que tu le mentionnes, hmm ?
    Ce n'est pas très malin, cela ne fait qu'entretenir la confusion...
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pouic
    Si c'est non-portable, ça sert à quoi que tu le mentionnes, hmm ?
    Ce n'est pas très malin, cela ne fait qu'entretenir la confusion...
    +1

    Il faut mieux ne faire aucune publicité pour cette "méthode", alors qu'il est facile d'écrire une méthode qui sera garantie pour fonctionner partout. Et c'est dans la FAQ C ici.

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

Discussions similaires

  1. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  2. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 09h40

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