Вопрос по c++ – Почему мой вывод cout не появляется сразу?

10

it не печатает строку, помещенную в цикл. Программа была написана с помощью G ++, с включенным заголовочным файлом sys / types.h

<code>for(int i=0;i<9;i++)
{
    cout<<"||";
    sleep(1);
}
</code>
пытатьсяcout << "||" << endl; Hunter McMillen
Можете ли вы опубликовать ошибку? Cole Johnson

Ваш Ответ

2   ответа
8

что вы, вероятно, видите здесь, является эффектом буферизации вывода. В общем случае вывод не будет записан доstd::endl используется

for(int i=0;i<9;i++)
{
    // Flushes and adds a newline
    cout<< "||" << endl;
    sleep(1);
}

Под капотомstd::endl добавляет символ новой строки, а затем используетstd::flush для принудительного вывода на консоль. Вы можете использоватьstd::flush напрямую, чтобы получить тот же эффект

for(int i=0;i<9;i++)
{
    cout << "||" << flush;
    sleep(1);
}
@ Наваз, поэтому я сказал «в общем», потому что это обычно так, но не всегда. JaredPar
Причина, по которой работает std :: endl, добавляет конец строки (\ n для * nix, \ r \ n для Windows) и std :: flush. Ключевой частью является std :: flush, но std :: endl, безусловно, работает. Stephen Newell
Может быть, вы должны указать, что endl добавляет конец строки И вызывает флеш. Одного '\ n' должно быть достаточно в большинстве случаев. Klaim
В общем случае вывод не будет записан пока не напечатана новая строка. .. Это не правильно. Новая строка не дает такой гарантии. Обратите внимание, чтоstd::endl добавляет новую строку в буфера такж затем промой. Nawaz
@ JaredPar: Это не имеет значения, так как вывод может быть записан, даже если нет новой строки; все зависит от того, насколько большой буфер и как он реализова Nawaz
14

Вы не очищаете вывод.

std::cout << "||" << std::flush;

Похожие вопросы