std::cout ne sont pas imprimer
Est là toute circonstance quand std::cout << "hello"
ne fonctionne pas? J'ai un code c/c++, cependant la std::cout
ne pas imprimer quoi que ce soit, même pas les chaines (comme "bonjour").
Est-il un moyen de vérifier si cout
est capable/incapable d'ouvrir le flux? Il y a quelques fonctions de membre comme good()
, bad()
, ... mais je ne sais pas lequel est adapté pour moi.
Ah, tampon de sortie, bien que l'art sans cœur et cruel à la jeune fille.
Il n'y a pas de
Dans un système de fenêtrage, la
jamais donner de cout NUL. il cessera de fonctionner.
Il n'y a pas de
std::cout
en C.Dans un système de fenêtrage, la
std::cout
ne peut pas être mis en œuvre parce qu'il y a windows et le système d'exploitation ne sais pas lequel de vos fenêtres à la sortie.jamais donner de cout NUL. il cessera de fonctionner.
OriginalL'auteur mahmood | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
Assurez-vous de vider le flux. Cela est nécessaire parce que les flux de sortie sont mises en mémoire tampon et que vous n'avez aucune garantie sur lorsque le tampon d'être vidée, à moins que vous rincer manuellement vous-même.
std::endl
va sortir un retour à la ligne et de vider le flux. Sinon,std::flush
sera juste faire de la chasse d'eau. Le nettoyage peut aussi être fait en utilisant le flux de la fonction de membre:std::cout << "hello\n"
pas de différence 🙁
Depuis quand est-ce qu'envoyer juste un saut de ligne char à la forme d'un flux de sortie de force une chasse d'eau? Je pensais que la norme n'était pas content-aware sur les bouffées de chaleur, en s'appuyant sur les membres (
flush()
) et manipulateurs (endl
) pour un voyage de la mémoire tampon flush? Il a été comme ça depuis un spécifique de la norme C++?Ensuite, si elle ne chasse sur votre mise en œuvre, il le fait en dehors de la norme. Il n'est pas garanti sur toutes les implémentations. Si vous voulez une garantie de retour à la ligne+flush, vous avez besoin
std::endl
ou ajouter une\n
puis d'appeler l'un des un certain nombre de membres qui voyage d'une chasse d'eau. Juste l'ajout de texte avec un'\n'
ne sera pas garanti par la norme de le faire seul.Pour l'exhaustivité (sftrabbit solutions proposées sont de mieux en mieux), mais vous pouvez l'appeler
std::cout.rdbuf()->pubsetbuf( NULL, 0 );
pour désactiver la mise en mémoire tampon. Ou vous pouvez fairestd::cout << std::unitbuf
pour activer l'unité de mise en mémoire tampon.OriginalL'auteur Joseph Mansfield
Il est probable que
std::cout
ne fonctionne pas à cause de mise en mémoire tampon (ce que vous écrivez se termine dans la mémoire tampon destd::cout
au lieu de la sortie).Vous pouvez faire l'une de ces choses:
rincer
std::cout
explicitement:utilisation
std::cerr
à la place.std::cerr
n'est pas mise en mémoire tampon, mais il utilise un autre flux (c'est à dire la deuxième solution peut ne pas fonctionner pour vous si vous êtes intéressé par plus que "voir le message sur la console").OriginalL'auteur utnapistim
Pour désactiver la mise en mémoire tampon, vous pouvez appeler cela:
Sinon, vous pouvez appeler votre programme et de désactiver la sortie de la mémoire dans la ligne de commande:
Garder à l'esprit ce n'est généralement pas fait pour des raisons de performances.
OriginalL'auteur Nicolay77
std::cout ne fonctionne pas sur les applications à interface graphique!
Spécifique à MS Visual Studio:
Quand vous voulez une application de console et de l'utilisation de MS Visual Studio, le projet de la propriété "de l'éditeur de liens -> Système -> sous-système" de la Console. Après la création d'un nouveau projet Win32 (pour un natif C++ app) dans Visual Studio, ce paramètre par défaut est "Windows" qui empêche std::cout de mettre n'importe quel sortie de la console.
OriginalL'auteur Jan Paulmann