fflush и цикл while

Я пытался использовать fflush, чтобы сделать индикатор выполнения. Чтобы протестировать fflush, я написал небольшой код ниже.

Он работает как положено, когда я раскомментирую "sleep(1);" но он работает неожиданным образом, если остается закомментированным. Он печатает первое тире, ждет, затем печатает все оставшиеся 9 и завершает работу.

Я не понимаю, почему это имеет значение.

int main()
{
    int f,j;
    j =0;
    for(f=0;f<10;f++)
     {
        printf("-");
        fflush(stdout);
        while(j++<1000000000);
        //sleep(1);
     }
}

person yam    schedule 01.10.2010    source источник
comment
Спасибо, это была глупая ошибка :)   -  person yam    schedule 01.10.2010
comment
Надеюсь, вы на самом деле не планируете использовать while (j++ < 1000000000) вместо вызова sleep.   -  person jamesdlin    schedule 01.10.2010


Ответы (4)


Измените цикл for следующим образом:

от:

for(f=0;f<10;f++)

to:

for(f=0, j=0; f<10; f++, j=0)
person Ziffusion    schedule 01.10.2010

Вам нужно установить j обратно в ноль после цикла while. На следующей итерации он просто пропустит цикл while.

person syork    schedule 01.10.2010

Это связано с тем, что вы не сбрасываете счетчик внутреннего цикла j на ноль при каждой итерации внешнего цикла, т. е. while() выполняется только в первый раз. Ничего подобного с fflush() :)

person Nikolai Fetissov    schedule 01.10.2010

Для первой итерации for f=0 он напечатает первый тире, затем запустит j до 1 миллиарда, а затем напечатает девять оставшихся тире, потому что j больше 1 миллиарда, поэтому больше не нужно ждать или задерживать. Вот как это должно работать, если sleep(1) закомментировано.

Вы можете добавить строку j=0; после цикла while, чтобы обнулить j.

Когда вы раскомментируете sleep(1), будет небольшая почти незаметная задержка (я думаю, 1 миллисекунда) после печати каждого тире.

person Only You    schedule 01.10.2010