寻觅者6 发表于 2016-09-10 22:58

为什么不是一个一个的打印


为什么带有sleep函数的程序在ubuntu终端上打印不是每隔1s打印一次,而是到最后全部一起打印。 简单的程序也是这样的,奇怪了。以前都没发现这种问题,不知道哪里有问题。
#include<stdio.h>
int main(int argc, char *argv[])
{
    int i = 10;
    for(; i >= 0; i--)
    {
       printf("%d ", i);
       sleep(1);
    }
   printf("\n");
    return 0;
}

giantchen 发表于 2016-09-11 08:11

sleep之前加一句 fflush(stdout);

寻觅者6 发表于 2016-09-11 08:48

giantchen 发表于 2016-09-11 08:11
sleep之前加一句 fflush(stdout);

谢谢啊,现在可以一个字的打印了,谢谢。对了printf是带缓存的标准io吗?

寻觅者6 发表于 2016-09-11 09:47

谢谢原来我以前一直错了,printf是行缓存的函数。

lxyscls 发表于 2016-09-11 12:41

你可以把stdout设为“不缓冲”

寻觅者6 发表于 2016-09-11 13:06

lxyscls 发表于 2016-09-11 12:41
你可以把stdout设为“不缓冲”

如何设置呢?我以前完全没能过?,是不是写成"sterror"吗?

lxyscls 发表于 2016-09-11 13:10

寻觅者6 发表于 2016-09-11 13:06
如何设置呢?我以前完全没能过?,是不是写成"sterror"吗?

man setvbuf不是设置成stderr

evaspring 发表于 2016-09-12 20:11

io有缓存 楼上几个说的很清楚了

1581526111 发表于 2016-09-13 15:58

printf("%d ", i);   ----> printf("%d \n", i);

MMMIX 发表于 2016-09-13 17:56

回复 6# 寻觅者6

如何设置呢?


setvbuf(3)
页: [1] 2
查看完整版本: 为什么不是一个一个的打印