可能重复:
为什么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将不会打印任何内容。 它只会在输出缓冲区满时才开始打印。 请看这个问题和这个 。