цикл fflush и while - PullRequest
       25

цикл fflush и while

1 голос
/ 01 октября 2010

Я пытался использовать 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);
     }
}

Ответы [ 4 ]

2 голосов
/ 01 октября 2010

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

1 голос
/ 01 октября 2010

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

от

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

до:

for(f=0, j=0; f<10; f++, j=0)
1 голос
/ 01 октября 2010

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

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

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

1 голос
/ 01 октября 2010

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

...