Comment faire pour vider la mémoire tampon du cout dans Visual C++


Résumé


Dans une application développée avec Microsoft C/C++, le flux de cout est en mémoire tampon. En d’autres termes, les informations transmises dans le flux de cout n’apparaissant pas à l’écran jusqu'à ce que ses tampons sont vidées. Pour Visual C++ version 4.2 ou ultérieure, ce problème se produit uniquement lorsque vous utilisez les anciennes bibliothèques iostream. Il existe quatre méthodes pour vider la mémoire tampon de cout, comme suit :
  • Le manipulateur endl permet d’insérer un caractère de saut de ligne dans le flux de sortie et de vider la mémoire tampon. Utilisez l’opérateur d’insertion avec le manipulateur endl, comme suit :
    cout << ... << endl;
  • Utilisez la fonction de vidage de membre dans la classe ostream ou le manipulateur de vidage. Le manipulateur de vidage n’insère pas un caractère de saut de ligne dans le flux de données avant qu’il vide la mémoire tampon. Pour appeler la fonction de vidage de membre, utilisez un code semblable au suivant :
    cout.flush();
    Utilisez l’opérateur d’insertion avec le vidage manipulateur comme suit :
    cout << ... << flush;
  • Lire à partir du flux cin ou d’écrire dans les flux de cerr ou de COLMATAGE. Dans la mesure où ces objets partagent la mémoire tampon avec cout, chacun vide le contenu de la mémoire tampon avant d’apporter des modifications à celui-ci.
  • Quittez le programme pour vider toutes les mémoires tampons en cours d’utilisation.

Informations supplémentaires


Étant donné que cout est mis en mémoire tampon, texte créés par l’application n’est pas immédiatement affichée à l’écran. Dans certains cas, ce comportement peut être interprété à tort comme une erreur dans le cout. Pour obtenir un exemple d’une application qui détermine quand effectuer un vidage de la mémoire tampon de cout, consultez les pages 377-378 de Microsoft C/C++ « Guide de l’utilisateur du bibliothèques de classe » pour la version 7.0. Pour plus d’informations sur le vidage du flux de cout avec le manipulateur endl, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :