Fflush и пока цикла
-
26-09-2019 - |
Вопрос
Я пытался использовать Fflush, чтобы сделать батончик прогресса. Чтобы проверить Fflush, я написал небольшой код ниже.
Работает так, как это должно быть, когда я беспокою «сон (1);» Но он работает неожиданным образом, если он останется прокомментированным. Он печатает первую черту, ждет, чем печатает все оставшиеся 9 из них и выходит.
Я не понимаю, почему это имеет значение.
int main()
{
int f,j;
j =0;
for(f=0;f<10;f++)
{
printf("-");
fflush(stdout);
while(j++<1000000000);
//sleep(1);
}
}
Решение
Измените свой на петлю, как так:
от:
for(f=0;f<10;f++)
к:
for(f=0, j=0; f<10; f++, j=0)
Другие советы
Вам нужно установить j
Вернуться к нулю после цикла While. Следующая итерация оно просто пропустит цикл While.
Это потому, что вы не сбрасываете счетчик внутреннего цикла j
до нуля при каждой внешней петле итерации, то есть while()
выполняется только первый раз. Нечего так с fflush()
:)
Для первого «для» итерации f=0
, он будет распечатать первую черту, затем запустится j
До 1 миллиарда, а затем напечатает девять оставшихся тире, потому что j больше, чем 1 миллиард, следовательно, больше не ждать или задержки. Вот как это должно управлять, если sleep(1)
прокомментирован.
Вы можете добавить линию j=0;
После того, как цикл, чтобы сбросить j до нуля.
Когда ты растягиваешься sleep(1)
Там будет небольшая почти незаметная задержка (я думаю, 1 миллисекунд) после печати каждая дамп.