fflush while while循环

问题描述:

我一直在尝试使用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 ++ jamesdlin 2010-10-01 03:29:35

更改您的for循环,像这样:

来自:

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

到:

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

您需要在while循环后将j设置回0。下一次迭代它将跳过while循环。

这是因为在每次外循环迭代时都不会将内循环计数器j重置为零,即仅在第一次执行时才会执行while()。没什么所以用fflush() :)

为先“为”迭代f=0,将打印的第一个破折号,随后将运行j高达1十亿,然后将打印剩余的九个破折号因为j大于10亿因此不再等待或延迟。如果sleep(1)被注释掉,它应该如何运行。

您可能希望在while循环之后添加行j=0;以将j重置为零。

当您取消注释sleep(1)时,打印每个短划线后会出现一个几乎不明显的延迟(我猜测是1毫秒)。