关于C语言中标准I/O输入输出流的问题

代码如下(linux平台下):
#include<stdio.h>
#include<unistd.h>

int main(void)
{
while(1)
{
sleep(1);
printf("11");
}
return 0;
}
这样的话屏幕上什么也没有打印,但是去掉sleep(1);这行时却能打印出来,求高手解释 越详细越好
另外printf是标准stdout,要输出有两种情况:1.程序结束2.遇到换行符
我试了一下 加个'\n'能顺利输出,但是
int main(void)
{
while(1)
{
printf("11");
}
return 0;
}
这种情况没1没有换行,2程序没有结束 为什么还能输出?????问题是不是出在sleep()这个函数的机制上啊???没分了。。。。还望各位大神帮帮忙,谢谢!

printf要输出不止你说的两种情况
因为printf是带缓冲
缓冲区有大小限制 超过缓冲区大小
也会输出
加了sleep 由于调度的关系 字符没有出那么快了追问

似乎明白了一点,是不是说没有sleep()的时候printf输出也是需要有时间来填充缓冲区的,将N个1填满缓冲区后一块输出,只是这个时间太短了造成了以为是不断输出的假象?当加了sleep(1)后变成了1秒填2个1进缓冲区,缓冲区填满的时间变长了???

追答

是啊 不信 你输出400个char看看 马上出来了
linux下面的sleep是1秒
你不用sleep一直在填 很快就填满了

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答