Я хочу проверить, активны ли разные циклы, поэтому у меня есть оператор печати, который повторяется каждые 500 мс в каждом цикле, однако оператор печати не печатает каждые 500 мс, он ждет завершения цикла, а затем печатает все сразу, а не периодически .
Как мне заставить мою программу периодически печатать на терминале?
Я студент, поэтому мои знания SDL довольно ограничены, поэтому подробное объяснение будет оценено.
int main(void)
{
int i = 0;
while(i<10)
{
printf("While loop active.\t"); i++;
SDL_Delay(500);
}
return 0;
}
P.S. Я видел этот повторяющийся вопрос, но я не согласен, поскольку его вопрос предполагает проблему с «обработкой сигналов», о которой я ничего не знаю, поэтому, задавая этот вопрос, я не думал, что на его вопрос будет такой же ответ, как мой. Я принимаю, что данные ответы одинаковы.
printf
вывод в C обычно буферизуется. Информация накапливается внутри до тех пор, пока выходной драйвер не решит, что пришло время действительно отправить ее. Выходной буфер не очищается до тех пор, пока (а) он не заполнится (много информации), (б) вы не напечатаете каретку/возврат/перевод строки или (в) вы не сделаете явноеfflush(stdout)
. Почему бы не использовать\n
вместо\t
, тогда вы сразу увидите результат? Вывод вкладки (\t
) будет немного беспорядочным. Если вам действительно необходимо иметь\t
, используйтеfflush(stdout)
послеprintf
. - person lurker   schedule 17.07.2018