Pourquoi ne printf pas rincer après l'appel, à moins d'un retour à la ligne est dans la chaîne de format?

Pourquoi ne printf pas rincer après l'appel, à moins d'un retour à la ligne est dans la chaîne de format? Est-ce un comportement POSIX? Comment pourrais-je avoir printf immédiatement rincer à chaque fois?

  • avez-vous cherché à savoir si ce qui se passe avec n'importe quel fichier ou uniquement avec les terminaux? que serait son pour être un savant terminal dispose pas de sortie inachevés ligne à partir d'un programme en tâche de fond, même si j'attends qu'il ne s'applique pas à l'avant-plan du programme.
  • Sous Cygwin bash je le vois même les débordements, même si un retour à la ligne est dans la chaîne de format. Ce problème est nouveau pour Windows 7; de la même source, le code a bien fonctionné sur Windows XP. MS cmd.exe bouffées de chaleur comme prévu. Le correctif setvbuf(stdout, (char*)NULL, _IONBF, 0) contourne le problème, mais ne devrait certainement pas été nécessaire. Je suis l'aide de MSVC++ 2008 Express. ~~~
  • Pour préciser le titre de la question: printf(..) ne pas faire de rinçage lui-même, c'est la mise en mémoire tampon de stdout qui peuvent vider lors de voir un retour à la ligne (si c'est la ligne tampon). Il allait réagir de la même façon à putchar('\n');, donc printf(..) n'est pas spécial à cet égard. Ceci est en contraste avec cout << endl;, le documentation de qui en évidence mentionne le rinçage. Le documentation de printf ne parle pas de rinçage à tous.
  • l'écriture (/rinçage) est potentiellement une opération coûteuse, c'est probablement mis en mémoire tampon pour des raisons de performances.
InformationsquelleAutor Crazy Chenz | 2009-11-11