22 votes

Quand est-ce que printf ne parvient pas à imprimer ?

La fonction printf en c n'imprime pas toujours la sortie à l'écran. Par exemple, si vous oubliez de mettre \n à la fin de la chaîne que vous imprimez, il arrive que vous n'obteniez pas l'o/p. Existe-t-il d'autres conditions dans lesquelles printf n'imprime pas ? Je me souviens que quelqu'un a dit qu'il y avait 7 conditions de ce type. Pouvez-vous m'aider ?

29voto

user1214634 Points 346

La sortie standard est un flux mis en mémoire tampon, il n'est pas garanti qu'il se vide à moins qu'une nouvelle ligne soit insérée, que le flux soit fermé ou que le programme sorte normalement. Si le programme se termine de manière anormale, il est possible que le flux ne se vide pas. La sortie standard est mise en tampon par ligne, c'est pourquoi une nouvelle ligne la purgera. Il existe des tampons qui ne se videront pas avec une nouvelle ligne.

10voto

Irony Points 297

Ce n'est pas ça printf ne s'imprimera pas toujours, c'est qu'il n'est pas garanti que l'impression soit immédiate. Cela signifie que si vous l'utilisez à des fins de débogage, vous ne pouvez pas garantir que cela se produira exactement au moment où cela se produit dans le code. Si vous voulez être sûr qu'il s'imprime exactement au moment où vous l'avez dit, appelez la commande fflush(stdout) .

Note : Vous ne voulez généralement pas utiliser fflush(stdout) à moins que vous ne déboguiez, il est très gourmand en ressources et si vous vous souciez un tant soit peu de la rapidité des performances, il a le potentiel de vous ralentir.

0voto

DwayneAllen Points 19

Comme utilisateur1214634 dit que stdout est mis en mémoire tampon et n'imprime à l'écran que sous certaines conditions. Si vous voulez forcer l'impression, vous pouvez appeler fflush(stdout).

0voto

Jacob Points 21

J'ai utilisé

puts(largeString); 

parce que dans mon cas particulier, printf() vient d'arrêter d'imprimer à mi-chemin. La chaîne entière était là, mais elle ne s'est pas imprimée.

fflush(stdout) n'a pas résolu le problème non plus, un autre printf() sur la ligne suivante a imprimé sans problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X