2010-10-01 3 views
1

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

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

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

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

Спасибо, что был тупой ошибкой :) – yam

+0

Я надеюсь, что вы на самом деле не планируя использовать 'while (j ++ <1000000000)' вместо вызова 'sleep'. – jamesdlin

ответ

1

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

от:

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

к:

for(f=0, j=0; f<10; f++, j=0) 
2

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

1

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

1

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

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

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