Y a-t-il des circonstances où std::cout << "hello"
ne fonctionne pas? J'ai un code c/c ++, cependant le std::cout
n'imprime rien, pas même les chaînes constantes (comme "hello").
Y a-t-il un moyen de vérifier si cout
est capable/incapable d'ouvrir le flux? Il existe certaines fonctions membres telles que good()
, bad()
, ... mais je ne sais pas laquelle me convient.
Assurez-vous de vider le flux. Cela est nécessaire car les flux de sortie sont mis en mémoire tampon et vous n'avez aucune garantie quant au moment où le tampon sera vidé, sauf si vous le videz vous-même manuellement.
std::cout << "Hello" << std::endl;
std::endl
va générer une nouvelle ligne et vider le flux. Sinon, std::flush
sera juste fera la chasse. Le vidage peut également être effectué à l'aide de la fonction membre du flux:
std::cout.flush();
Il est probable que std::cout
ne fonctionne pas à cause de la mise en mémoire tampon (ce que vous écrivez se retrouve dans la mémoire tampon de std::cout
au lieu de dans la sortie).
Vous pouvez faire l'une de ces choses:
vider std::cout
explicitement:
std::cout << "test" << std::flush; // std::flush is in <iostream>
std::cout << "test";
std::cout.flush(); // explicitly flush here
std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes
utilisez std::cerr
à la place. std::cerr
n’est pas mis en mémoire tampon, mais il utilise un flux différent (c’est-à-dire que la deuxième solution risque de ne pas fonctionner pour vous si vous êtes intéressé par autre chose que "voir le message sur la console").
Pour désactiver efficacement la mise en mémoire tampon, vous pouvez appeler ceci:
std::setvbuf(stdout, NULL, _IONBF, 0);
Vous pouvez également appeler votre programme et désactiver la mise en mémoire tampon de sortie dans la ligne de commande:
stdbuf -o 0 ./yourprogram --yourargs
Gardez à l'esprit que cela n'est généralement pas fait pour des raisons de performances.
std :: cout ne fonctionnera pas avec les applications graphiques!
Spécifique à MS Visual Studio : Si vous souhaitez utiliser une application console et utiliser MS Visual Studio, définissez la propriété de projet "Éditeur de liens -> Système -> Sous-système" sur Console. Après avoir créé un nouveau projet Win32 (pour une application C++ native) dans Visual Studio, ce paramètre est défini par défaut sur "Windows", ce qui empêche std :: cout de placer une sortie sur la console.