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

问题描述

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

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

解决方案

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

解决方案二:

在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

时间: 2024-12-11 17:37:13

c++、cout缓存区问题-C++中的cout的缓存区清空问题的相关文章

c++中输入和输出缓存区的一些问题

问题描述 c++中输入和输出缓存区的一些问题 1.c++中如果在小黑框中输入一个字符串但是没有按回车使之输入到缓冲区,那么这些数据存放在哪里? 2.有哪些情况会刷新输出缓冲区? 3.输入缓冲区和输出缓冲区分别在内存的那个地方,是内存中的栈还是堆还是其他地方? 4.怎么在小黑框里吧换行字符给get()? 解决方案 1.存放在操作系统的I/O缓冲区 2.不知道 3.内存的栈区 4.使用转义字符

ASP.NET 2.0中的页面输出缓存

asp.net|缓存|页面 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出

一篇文读懂缓存在大型分布式系统中的最佳应用

本文大纲: 缓存概述 CDN缓存 反向代理缓存 分布式缓存 本地缓存 缓存架构示例 缓存常见问题        一.缓存概述       缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问.   1.缓存的原理   将数据写入/读取速度更快的存储(设备): 将数据缓存到离应用最近的位置: 将数据缓存到离用户最近的位置.   2.缓存分类   在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用.   CDN缓存: 反向代

Android中图片的三级缓存机制_Android

我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存缓存中,缓存到强引用中 也就是LruCache中.如果强引用中空间不足,就会将较早存储的图片对象驱逐到软引用(softReference)中存储,然后将图片缓存到文件(内部存储外部存储)中:读取图片的时候,先读取内存缓存,判断强引用中是否存在图片,如果强引用中存在,则直接读取,如果强引用中不存在,则

详解Java的Hibernate框架中的注解与缓存_java

注解Hibernate注解是一个没有使用XML文件来定义映射的最新方法.可以在除或替换的XML映射元数据使用注解. Hibernate的注解是强大的方式来提供元数据对象和关系表的映射.所有的元数据被杵到一起的代码POJO java文件这可以帮助用户在开发过程中同时要了解表的结构和POJO. 如果打算让应用程序移植到其他EJB3规范的ORM应用程序,必须使用注解来表示映射信息,但仍然如果想要更大的灵活性,那么应该使用基于XML的映射去. 环境设置Hibernate注释 首先,必须确保使用的是JDK

C/C++中printf/cout 计算顺序与缓冲区问题

1.printf/cout在同一个语句中都是从右向左计算的. 看如下的代码: 1 #include <stdio.h> 2 int main() 3 { 4 int i=0; 5 printf("%d %d",i++,i++); 6 printf(" %d",i++); 7 return 0; 8 } 输出结果: 1 0 2 (第5行,先计算右边的i++,再计算左边的i++.所以输出时1 0) 2.printf/cout 有行缓冲区 直到缓冲区满,或者遇

Android中图片的三级缓存机制

我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存缓存中,缓存到强引用中 也就是LruCache中.如果强引用中空间不足,就会将较早存储的图片对象驱逐到软引用(softReference)中存储,然后将图片缓存到文件(内部存储外部存储)中:读取图片的时候,先读取内存缓存,判断强引用中是否存在图片,如果强引用中存在,则直接读取,如果强引用中不存在,则

说说云计算中的地域和可用区概念

上一篇说数加的文章,很多同学向我吐槽说看不懂,里面有太多云计算的产品和概念,对于没有接触使用云计算的同学来说,确实有点像天书一样,满眼都是陌生的名词.所以接下来准备安利一下云计算的一些基本概念,看看对大家有没有帮助. 亚马逊AWS是公共云计算的先驱,一些云计算中重要的产品设计和基础概念可以说都是亚马逊引入的.这其中有两个非常重要的概念:地域(Region)和可用区(AZ:Availabe Zone).很多第一次接触云计算的同学,光看这两个名字的字面意义,虽然也能够猜出大致的意思,但深入的学习了解

iOS中的NSURLCache数据缓存类用法解析_IOS

 在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在IOS设备中加一个缓存的机制.使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求.下面将介绍如何在IOS设备中进行缓存.  内存缓存我们可以使用sdk中的NSURLCache类.NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型.    1.NS