这个C程序为什么工作?

这个C程序为什么工作?,c,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"); } #包括 #包括 内部主(空) { int i; 对于(i=0;i我假设

当我执行以下代码时

#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");
}
#包括
#包括
内部主(空)
{
int i;

对于(i=0;i我假设你的意思是,当你说它不“工作”时,你不会每秒看到一行新的输出

这是因为终端通常是行缓冲的,这意味着它们在收到完整的行之前不会显示传入的文本

您可以通过“刷新”输出流来解决此问题,强制终端显示它:

fflush(stdout);
此外,您的代码在
main()

末尾缺少
return
语句,
printf()
文本被发送到
stdout
缓冲区。此缓冲区在换行时自动刷新。因此,如果您不打印换行,缓冲区不会自动刷新

要手动刷新缓冲区,请使用
fflush(stdout)
,如下所示:

for(i=0;i<=100;i++)
{
  printf("Percentage complete: %d %%",i);
  fflush(stdout);
  sleep(1);
}

printf
是缓冲输出。在缓冲区已满或遇到换行符之前,数据不会打印到控制台


您可以通过调用
stdout

上的
fflush
强制打印数据,“不工作”是什么意思?它会爆炸吗?不工作是什么意思?您会遇到什么错误?@在某些应用程序中,爆炸、爆炸会起作用。:)Snif Snif…是缓冲IO?Mmmm..在C99及更高版本中,如果
main
的返回类型与
int
兼容,则可以忽略该返回。到达
}
结尾的
返回一个表示成功的退出代码。(不过,我还是更喜欢显式回报。)
for(i=0;i<=100;i++)
{
  printf("Percentage complete: %d %%",i);
  fflush(stdout);
  sleep(1);
}
printf("\rPercentage complete: %d %%",i);