2010-10-01 367 views
1

我一直在嘗試使用fflush來製作進度條。 爲了測試fflush,我寫了下面的小代碼。fflush while while循環

它的工作原理是當我取消註釋「sleep(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 2010-10-01 02:39:23

+0

我希望你不是真正計劃使用'while(j ++ <1000000000)'而不是調用'sleep'。 – jamesdlin 2010-10-01 03:29:35

回答

1

更改您的for循環,像這樣:

來自:

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

到:

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

您需要在while循環後將j設置回0。下一次迭代它將跳過while循環。

1

這是因爲在每次外循環迭代時都不會將內循環計數器j重置爲零,即僅在第一次執行時纔會執行while()。沒什麼所以用fflush() :)

1

爲先「爲」迭代f=0,將打印的第一個破折號,隨後將運行j高達1十億,然後將打印剩餘的九個破折號因爲j大於10億因此不再等待或延遲。如果sleep(1)被註釋掉,它應該如何運行。

您可能希望在while循環之後添加行j=0;以將j重置爲零。

當您取消註釋sleep(1)時,打印每個短劃線後會出現一個幾乎不明顯的延遲(我猜測是1毫秒)。