睡眠()行为在C ..?

可能重复:
为什么printf在调用之后不刷新,除非换行符在格式化string中?

我试图在论坛上回答一些问题,我遇到了相当有趣的事情。 这里是代码:

int main() { int print_val = -1; while(1) { printf("%d \n", ++print_val); sleep(1); } } 

这工作完美。 现在乐趣进入..只要将第7行改为printf("%d ", ++print_val); (只是删除换行!)

现在没有输出。

那么任何一个人都可以帮我理解sleep()函数的行为。 我认为有必要看sleep()而不是printf(),因为我试图用fprintf()和putc()来replace它,只给出相同的输出。

我已经尝试了32位Ubuntu上的这个代码以及在虚拟机中的32位Ubuntu。

谢谢阿多恩

我觉得问题是刷新输出缓冲区。 如果不在字符串末尾加上'\ n',输出缓冲区将不会被刷新,printf将不会打印任何内容。 它只会在输出缓冲区满时才开始打印。 请看这个问题和这个 。