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 :

Entrée/sortie au clavier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Entrée/sortie au clavier
    Re-bonjour,
    En lisant le FAQ de Developpez.com sur les entrées sorties clavier,

    j'ai vu l'explication de la fonction fflush suivante :

    "Cette fonction sert à forcer l'écriture physique des données se trouvant dans le tampon associé à un flux sortant. Par exemple :
    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
     
    #include <stdio.h>
     
    int main(void)
    {
        int n;
     
        printf("Entrez un nombre entier : ");
     
        /* En langage C, une ligne doit etre terminee par le caractere '\n'. Tant que       */
        /* la ligne n'est pas terminee et que le tampon associe au fichier n'est pas plein, */
        /* les caracteres transmis ne seront pas effectivement ecrits mais tout simplement  */
        /* places dans le tampon. On peut cependant forcer le vidage de ce tampon a l'aide  */
        /* de la fonction fflush.                                                           */
     
        fflush(stdout);
     
        scanf("%d", &n);
     
        printf("Merci pour : %d\n", n);
     
        return  0;
    }
    Cependant, la norme ajoute que le tampon associé à un flux sortant doit être également vidé lorsqu'une opération de lecture nécessite l'émission de ces caractères. Dans de nombreuses implémentations, une demande de lecture au clavier provoque le vidage du tampon associé à l'écran. Le 'fflush(stdout);' juste après notre printf serait donc automatiquement appelé au moment du scanf et dans ce cas, on peut tout simplement l'omettre."

    Or si moi j'écris la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(void)
    {
        printf("Entrez un nombre entier : ");
        return 0;
    }
    J'ai effectivement la phrase qui s'écrit à l'écran (je croyais qu'il fallais qu'il y ai fflush à la suite, pour qu'elle sécrive, ou alors un scanf ?)

    Quelqu'un saurais éclairer ma lanterne ?
    Il y a quelque chose que je n'ai pas saisi....

  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,

    Citation Envoyé par latitude38 Voir le message
    J'ai effectivement la phrase qui s'écrit à l'écran (je croyais qu'il fallais qu'il y ai fflush à la suite, pour qu'elle sécrive, ou alors un scanf ?)

    Quelqu'un saurais éclairer ma lanterne ? Il y a quelque chose que je n'ai pas saisi....
    En fait, le comportement du buffer peut être modifié grâce à setbuf() et à ses dérivées. Mais dans ton cas, ta chaîne est bien placée dans le tampon. Elle apparaît à l'écran justement parce que ton programme prend fin normalement. Ce faisant, le système va proprement refermer les flux qui sont encore ouverts, vers les fichiers ou vers la sortie standard. Et lors de la fermeture d'un fichier, tout ce qu'il y a en attente dans le tampon est bien sûr envoyé vers sa destination définitive.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut re:entrée sortie
    OK, ainsi ca expliquerait ce qu'il se passait lorsque j'utilisais les fonctions printf et fprintf de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdio.h>
     
     
    int main(void)
    {
        printf("Entrez un nombre entier : ");
     
        fprintf(stderr,"Entrez un deuxième nombre entier : ");
        return 0;
    }
    La sortie que j'obtiens ici est 'inversée' :
    "Entrez un deuxième nombre entier : Entrez un nombre entier : "

    Dans ce cas là le tampon rempli par la fonction 'printf' n'est vidé qu'à la fin du programme, alors que celui rempli par la fonction 'fprintf' est vidé directement puisqu'on écrit dans la sortie standard.

  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
    Tout-à-fait.

    Tu peux aussi jeter un œil à la man page de setbuf().

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2006, 11h41
  2. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  3. Débutant - Entrée/Sortie
    Par seigneur.viggen dans le forum Langage
    Réponses: 11
    Dernier message: 28/09/2005, 15h47
  4. Copie entrée-sortie
    Par Troell dans le forum C
    Réponses: 18
    Dernier message: 24/09/2005, 19h11
  5. Réponses: 11
    Dernier message: 13/10/2004, 00h58

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