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

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

<code>for(int i=0;i<9;i++)
{
    cout<<"||";
    sleep(1);
}
</code>
 Hunter McMillen11 мая 2012 г., 17:38
пытатьсяcout << "||" << endl;
 Cole Johnson11 мая 2012 г., 17:39
Можете ли вы опубликовать ошибку?

Ответы на вопрос(2)

что вы, вероятно, видите здесь, является эффектом буферизации вывода. В общем случае вывод не будет записан до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);
}
 Klaim11 мая 2012 г., 17:39
Может быть, вы должны указать, что endl добавляет конец строки И вызывает флеш. Одного '\ n' должно быть достаточно в большинстве случаев.
 JaredPar11 мая 2012 г., 17:45
@ Наваз, поэтому я сказал «в общем», потому что это обычно так, но не всегда.
 Stephen Newell11 мая 2012 г., 17:43
Причина, по которой работает std :: endl, добавляет конец строки (\ n для * nix, \ r \ n для Windows) и std :: flush. Ключевой частью является std :: flush, но std :: endl, безусловно, работает.
 Nawaz11 мая 2012 г., 17:41
В общем случае вывод не будет записан пока не напечатана новая строка. .. Это не правильно. Новая строка не дает такой гарантии. Обратите внимание, чтоstd::endl добавляет новую строку в буфера такж затем промой.
 Nawaz11 мая 2012 г., 17:44
@ JaredPar: Это не имеет значения, так как вывод может быть записан, даже если нет новой строки; все зависит от того, насколько большой буфер и как он реализова

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

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

Ваш ответ на вопрос