为什么这个C程序有效?

时间:2013-01-14 15:06:05

标签: c

当我执行以下代码时

#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");
}

代码似乎有效。我不知道为什么。

3 个答案:

答案 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强制打印数据。