当我执行以下代码时
#include<stdio.h>
#include<unistd.h>
int main(void)
{
int i;
for(i=0;i<=100;i++)
{
printf("Percentage complete: %d %%",i);
sleep(1);
}
printf("\n");
}
但是,当我执行以下代码
时,代码不起作用#include<stdio.h>
#include<unistd.h>
int main(void)
{
int i;
for(i=0;i<=100;i++)
{
printf("\nPercentage complete: %d %%",i); //There is a newline here
sleep(1);
}
printf("\n");
}
代码似乎有效。我不知道为什么。
答案 0 :(得分:10)
我认为你的意思是,当你说它不起作用时,你每秒钟都没有看到新的输出线。
这是因为终端通常是行缓冲的,这意味着他们不会在收到完整行之前显示传入的文本。
您可以通过“刷新”输出流来解决此问题,迫使终端显示它:
fflush(stdout);
此外,您的代码在return
末尾缺少main()
语句。
答案 1 :(得分:4)
将printf()
文本发送到stdout
缓冲区。此缓冲区在换行符上自动刷新。因此,如果您不打印换行符,则不会自动刷新缓冲区。
要手动清除缓冲区,请使用fflush(stdout)
,如下所示:
for(i=0;i<=100;i++)
{
printf("Percentage complete: %d %%",i);
fflush(stdout);
sleep(1);
}
假设您要反复更新同一行(使用增加百分比的动画),您可能需要在打印文本前面\r
:
printf("\rPercentage complete: %d %%",i);
答案 2 :(得分:3)
printf
是缓冲输出。在缓冲区已满或遇到换行符之前,数据不会打印到控制台。
您可以通过fflush
上的stdout
强制打印数据。