web-dev-qa-db-fra.com

std :: cout ne sera pas imprimé

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.

20
mahmood

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();
37
Joseph Mansfield

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").

5
utnapistim

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.

1
Nicolay77

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.

0
Jan Paulmann