1

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

4 回答 4

2

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

于 2010-10-01T02:26:49.813 回答
1

像这样改变你的 for 循环:

从:

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

至:

for(f=0, j=0; f<10; f++, j=0)
于 2010-10-01T03:40:11.203 回答
1

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

于 2010-10-01T02:26:52.133 回答
1

对于第一次 'for' 迭代f=0,它将打印第一个破折号,然后将运行j多达 10 亿个,然后它将打印剩余的 9 个破折号,因为 j 大于 10 亿,因此不再需要等待或延迟。sleep(1)如果被注释掉,这就是它应该如何运行。

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

当您取消注释时sleep(1),在打印每个破折号后会有一个几乎不明显的延迟(我猜是 1 毫秒)。

于 2010-10-01T02:43:19.930 回答