为什么printf在调用后不刷新,除非换行符的格式为字符串?这是POSIX行为吗?我怎样才能每次都立即刷新printf
默认情况下,stdout流是行缓冲的,因此只会在到达换行符后(或被告知时)显示缓冲区中的内容。您有几个选项可以立即打印:
-
改为使用
fprintf打印到stderr(stderr默认无缓冲):fprintf(标准,“我将立即打印”); -
使用
fflush在需要时刷新stdout:printf(“缓冲,将被刷新”); fflush(stdout);//现在将打印标准输出缓冲区中的所有内容 -
使用
setbuf禁用标准输出上的缓冲:setbuf(标准输出,空); -
或者使用更灵活的
setvbuf:setvbuf(标准输出,空,0);