c++ force std:: cout flush (печать на экран)

у меня есть следующий код:

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

проблема, однако, в том, что часто вывод #1 и вывод #2 появляются (практически) одновременно. То есть часто вывод #1 не выводится на экран до тех пор, пока computations() возвращает. Поскольку вся цель вывода №1-указать, что что-то происходит в фоновом режиме (и, таким образом, поощрять терпение пользователя), эта проблема не является хорошей.

есть ли способ заставить std::cout буфера печатается перед computations() звонок? В качестве альтернативы, есть ли какой-то другой способ (используя что-то другое, чем std::cout) для печати по стандарту, что бы исправить эту проблему?

2 ответов


просто вставить std::flush:

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

Также обратите внимание, что вставка std::endl также будет смывать после написания новой строки.


в дополнение к Джозефу Мэнсфилду ответ,std:: endl делает флеш тоже (кроме новой строки).

вставляет символ конечной строки в выходную последовательность os и сбрасывает его, как будто вызывая os.put (os.widen ('\n')), за которым следует os.вспыхнуть.)(