getchar() et stdin

Une question connexe est de ici, mais ma question est différente.

Mais, j'aimerais en savoir plus sur le fonctionnement interne de getchar() et de l'entrée standard. Je sais que getchar() en fin de compte les appels fgetc(stdin).

Ma question est sur le tampon, stdin et getchar() le comportement. Compte tenu de la classique de K&R exemple:

#include <stdio.h>

main()
{
    int c;

    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

Il me semble que getchar()'comportement pourrait être décrit comme suit:

Si il n'y a rien dans le stdin de la mémoire tampon, laissez le système d'exploitation accepter la saisie de l'utilisateur jusqu'à ce que [entrer] est pressée. Puis retour au premier caractère dans le tampon.

Supposons que le programme est exécuté et que l'utilisateur tape "anchois."

Ainsi, dans l'exemple de code ci-dessus, le premier appel à getchar() attend la saisie de l'utilisateur et attribue le premier caractère dans le tampon à c variable. L'intérieur de la boucle, la première itération de l'appel à getchar() dit: "Hey, il y a des choses dans la mémoire tampon, retour le caractère suivant dans la mémoire tampon." Mais la n-ième itération de la boucle while résultats dans getchar() en disant: "Hey, il n'y a rien dans le tampon, de sorte laisser stdin rassembler les types de l'utilisateur.

J'ai passer un peu de temps avec la source en c, mais il semble que c'est plus un comportement artefact de stdin plutôt que fgetc().

Je suis mal ici? Merci pour votre perspicacité.

J'en doute très très bien le "classique de K&R exemple" a la fflush(stdin) Comportement Indéfini! Je ne peux pas vérifier dans l'immédiat ...
Vous avez raison, j'ai corrigé l'exemple.
Merci, j'ai collé une sale exemple, qui contenait un peu de gravats à partir de mon expérimentation.

OriginalL'auteur ybakos | 2011-10-12

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *