web-dev-qa-db-fra.com

c ++ force std :: cout flush (impression à l'écran)

J'ai un code tel que le suivant:

std::cout << "Beginning computations..."; // output 1
computations();
std::cout << " done!\n";                  // output 2

Le problème, cependant, est que souvent la sortie # 1 et la sortie # 2 apparaissent (virtuellement) simultanément. Autrement dit, la sortie n ° 1 n'est souvent pas imprimée à l'écran avant le retour de computations(). Étant donné que le but de la sortie # 1 est d'indiquer que quelque chose se passe en arrière-plan (et donc d'encourager la patience de l'utilisateur), ce problème n'est pas bon.

Existe-t-il un moyen de forcer le tampon std::cout À s'imprimer avant l'appel de computations()? Sinon, existe-t-il un autre moyen (en utilisant autre chose que std::cout) Pour imprimer en sortie standard qui résoudrait ce problème?

31
synaptik

Insérez simplement std::flush :

std::cout << "Beginning computations..." << std::flush;

Notez également que l'insertion de std::endl videra également après avoir écrit une nouvelle ligne.

54
Joseph Mansfield

En plus de la réponse de Joseph Mansfield, std :: endl fait aussi le flush (en plus d'une nouvelle ligne).

Insère un caractère de fin dans la séquence de sortie os et le vide comme si en appelant os.put (os.widen ('\ n')) suivi de os.flush ().

5
user1810087