fflush和while循环

时间:2010-10-01 02:14:47

标签: c linux while-loop fflush

我一直在尝试使用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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

没有

答案 2 :(得分:1)

对于第一个'for'迭代f=0,它将打印第一个破折号,然后将运行j最多10亿,然后它将打印剩余的九个破折号,因为j大于10亿因此没有更多的等待或延迟。如果sleep(1)被注释掉,那就应该运行。

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

当您取消注释sleep(1)后,打印每个短划线后会有一个几乎无法察觉的延迟(我猜1毫秒)。

答案 3 :(得分:1)

更改你的for循环:

从:

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

为:

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