我一直在尝试使用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);
}
}
答案 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)