Подтвердить что ты не робот

С++ 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), для печати на стандартную версию, которая могла бы устранить эту проблему?

4b9b3361

Ответ 1

Просто вставьте std::flush:

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

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

Ответ 2

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

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