La ligne stdout est-elle mise en mémoire tampon, non tamponnée ou indéterminée par défaut?

Section 7.9.13/7 de c99 stipule que:

Au démarrage du programme, texte trois flux sont prédéfinis et ne doivent pas être ouverts de manière explicite - l'entrée standard (pour la lecture des classiques d'entrée), la sortie standard (pour l'écriture conventionnelle de sortie), et l'erreur-type (pour l'écriture de sortie de diagnostic).

Comme initialement ouvert, le flux d'erreur standard n'est pas entièrement mis en mémoire tampon; l'entrée standard et la sortie standard, les flux sont entièrement mis en mémoire tampon si et seulement si le cours d'eau peut être déterminée à ne pas se référer à un dispositif interactif.

Ce qui fait du sens. Si vous êtes à la poussée de la sortie standard vers un fichier, vous le voulez avec tampon pour plus d'efficacité.

Mais je ne peux trouver aucune mention dans la norme si la sortie est de la ligne de mise en mémoire tampon ou sans tampon lorsque vous ne peut pas de déterminer le périphérique est non-interactif (c'est à dire, de la production normale d'un terminal).

La raison, j'ai été demander à un commentaire de ma réponse ici que je dois insérer un fflush(stdout); entre les deux états:

printf ("Enter number> ");
//fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }

parce que je n'étais pas la résiliation de la printf avec un saut de ligne. Quelqu'un peut-il éclaircir ce point?

source d'informationauteur paxdiablo | 2010-09-16