Вопрос

Я пытался использовать 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 миллисекунд) после печати каждая дамп.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top