gpt4 book ai didi

c - 需要一个在C语言中延迟而不清除缓冲区的函数

转载 作者:行者123 更新时间:2023-11-30 20:11:43 25 4
gpt4 key购买 nike

我使用windows.h下的Sleep()函数来延迟,但它会清除缓冲区,这与unistd下的sleep()不同.h。有没有可以延迟而不清除缓冲区的功能?

#include<stdio.h> 
#include<windows.h>

int main(void)
{
printf("hello");
Sleep(2000);
return 0;
}

最佳答案

看来您希望 stdout 进行行缓冲,因此调用不带换行符的 printf 不会导致任何实际输出。但是,如果 stdout 可能是交互式设备,则 C 语言标准允许行缓冲或不缓冲。使用 Microsoft C 运行时时,stdout 将不缓冲。

因此,字符串 hello 被直接发送到标准输出,完全绕过运行时库缓冲。您随后调用 Sleep() 的事实与此无关。

您可以使用setvbuf()显式配置 stdout 以进行完全缓冲,以便仅在显式刷新流时才会发送输出。请注意,Microsoft C 运行时不支持行缓冲。

PS:您还应该注意,据我所知,运行时不需要提供任何特定大小的缓冲区,也不需要任何规则阻止它出于任何原因刷新缓冲区。如果您的程序必须稍后才写入输出,我认为唯一完全安全的方法就是自己缓冲数据。

关于c - 需要一个在C语言中延迟而不清除缓冲区的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com