2 qq 32194415 qq_32194415 于 2016.03.27 09:35 提问

C++中的cout的缓存区清空问题

很多地方都看到这样一个描述“cout有一个缓存区,当用cout向输出流中插入待输出内容时,这些待输出内容并不是立即就被送到输出设备了,而是先存入到这个缓存区中,当cout遇到endl或者缓存区满的时候才会向屏幕输出”请问这句话是对的吗?我怎么总感觉不对劲啊,感觉有矛盾啊,如果这个说法是正确的,那么是不是说当执行输出语句cout<<a时如果缓存区没有满或者没有遇到endl的时候就不能进行输出了吗?是这样理解吗?求解啊!!!

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.27 21:04
已采纳

在Unix下的C语言用select函数就可以判断有无数据。
Windows下网络也可用select,键盘输入则用_kbhit函数。
MSDN里的例子:
#include
#include

int main( void )
{
/* Display message until key is pressed. */
while( !_kbhit() )
_cputs( "Hit me!! " );

/* Use _getch to throw key away. */
printf( "\nKey struck was '%c'\n", _getch() );
}
也可以参考http://bbs.csdn.net/topics/390497761

qq423399099
qq423399099 回复qq_32194415: 这个说来话长了,楼主参考下http://www.cnblogs.com/charm/archive/2010/08/17/1801419.html
一年多之前 回复
qq_32194415
qq_32194415 没有懂啊 大神 我是初学者 能具体解释一下这个cout的缓存区方面的内容吗?
一年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.03.27 09:58

因为cout是行缓冲的,只有在以下情况下,cout才会立即输出:
(1)缓冲区满
(2)用户手动刷新,显式地清空缓冲
(3)程序结束
(4)从标准输入流中读数据
与cout不同,printf是无缓存的,立即输出。你可以把cout换成printf,就能看出区别了。

qq_32194415
qq_32194415 回复qq_32194415: 这段代码的六七行都可以输出a的值吗?
一年多之前 回复
qq_32194415
qq_32194415 #include<iostream> using namespace std; int main() { int a=1; cout<<a; cout<<a<<endl; return 0; }
一年多之前 回复
qq_32194415
qq_32194415 回复小灸舞: #include<iostream>
一年多之前 回复
qq423399099
qq423399099 回复qq_32194415: 最好贴一下代码
一年多之前 回复
qq_32194415
qq_32194415 回复小灸舞: 但是我用vs2015写出来的输出程序这一句是可以运行的啊 那这是为什么呢?
一年多之前 回复
qq423399099
qq423399099 回复qq_32194415: 是啊
一年多之前 回复
qq_32194415
qq_32194415 回复小灸舞: 什么意思啊???
一年多之前 回复
qq423399099
qq423399099 回复qq_32194415: yep
一年多之前 回复
qq_32194415
qq_32194415 那是不是说cout<<a;这一句在缓存区没有满或者没有遇到endl的时候就不能进行输出了???
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!