为什么无限循环会在我的 C 程序中更早地阻塞 printf 语句?
Why does an infinite loop block a printf statement earlier in my C program?
此 C 程序打印 Done
,然后进入无限循环。
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Done");
while (1) {}
return 0;
}
但是当我 运行 它时,这段代码 而不是 打印 Done
。这是为什么?
在 printf
语句后添加 fflush(stdout);
。 stdout
默认情况下通常是行缓冲的。
需要刷新缓冲区。通常控制台输出在收到 '\n'
.
之前不会刷新
这里有一个很少用到的函数,fflush()
。
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Done");
fflush(stdout);
while (1) {}
return 0;
}
应该为您打印。
stdout 已缓冲。它不会打印直到它被刷新(例如,但是打一个换行符)。
您可以将 '\n'
添加到您的 printf
调用中:
printf("Done\n");
或通过调用
禁用其抛光
setbuf(stdout, NULL);
此 C 程序打印 Done
,然后进入无限循环。
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Done");
while (1) {}
return 0;
}
但是当我 运行 它时,这段代码 而不是 打印 Done
。这是为什么?
在 printf
语句后添加 fflush(stdout);
。 stdout
默认情况下通常是行缓冲的。
需要刷新缓冲区。通常控制台输出在收到 '\n'
.
这里有一个很少用到的函数,fflush()
。
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Done");
fflush(stdout);
while (1) {}
return 0;
}
应该为您打印。
stdout 已缓冲。它不会打印直到它被刷新(例如,但是打一个换行符)。
您可以将 '\n'
添加到您的 printf
调用中:
printf("Done\n");
或通过调用
禁用其抛光setbuf(stdout, NULL);