我在Sleep()
下使用windows.h
功能进行延迟,但与sleep()
下的unistd.h
不同,它会清除缓冲区。
是否有延迟功能而不清除缓冲区?
#include<stdio.h>
#include<windows.h>
int main(void)
{
printf("hello");
Sleep(2000);
return 0;
}
答案 0 :(得分:2)
看起来您需要stdout
进行行缓冲,因此在没有换行符的情况下调用printf
不会导致任何实际输出。但是,如果stdout
可能是交互式设备,则C语言标准允许 行缓冲或不缓冲。使用Microsoft C运行时时,stdout
将无缓冲。
因此,字符串hello
将直接发送到标准输出,完全绕过运行时库缓冲。之后你正在调用Sleep()的事实与它无关。
您可以使用setvbuf()
显式配置stdout
进行完全缓冲,以便仅在显式刷新流时才会发送输出。请注意,Microsoft C运行时不支持行缓冲。