c - 由于 sleep() 导致的奇怪行为

标签 c

我刚刚开始熟悉 sleep(),我发现

#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
    printf("%d",i);
    sleep(1);
}
return 0;

这不会在每次迭代时打印数字,而是在退出循环时转储所有数字.... 但是当我修改 printf 时...

#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
    printf("%d\n",i);
    sleep(1);
}
return 0;

现在我添加了 '\n' 新行,它按预期工作......为什么它在前一个中表现得很奇怪......

最佳答案

这是因为输出缓冲区没有被刷新(换句话说,实际上提交给终端)。当你写一个换行符时,输出缓冲区更有可能被刷新(但在某些情况下并不总是)。许多终端实现这样做是为了提高性能。要强制执行您想要的行为,您需要在每次 printf 调用后调用 fflush(stdout);,如下所示:

#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
    printf("%d",i);
    fflush(stdout);
    sleep(1);
}
return 0;
}

关于c - 由于 sleep() 导致的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870518/

相关文章:

c - 为什么我们需要在 C 并发服务器中为每个客户端创建不同的进程?

c - For 循环 - 结构

c - 如何将指针指向数组的内容赋值?

无法在链表中存储元素

c - 打印链接列表时出现意外输出

C:在列表上使用哨兵

c - 在哪里可以找到函数 "__swtch_pri"的代码?

c - C语言中的快速排序算法对单词进行排序

c - 如何在 C 中使用结构体?

c - 在 C 中获取下一个枚举值?