cin;cout,clog,cerr @p5

本文介绍了计算机程序中缓冲区(buffer)的概念及其刷新机制,并详细对比了标准输出流对象cout、cerr与clog的区别,包括它们的数据流向、缓冲特性及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、相关概念

缓冲区(buffer): 如果要输出一串字符串,为了避免每输入一个字母就把其输出到输出装置中(显示器控制台),设立了一个内部数据结构叫buffer,其可以累计要输出的字符,等有需要一并输出的时候,它才将此字符串整个输出,从而刷新buffer!

buffer刷新原因:1.缓冲区满了(如何更改缓冲区的大小;缓冲区会自动根据需要增加吗

                           2.从标准库读入数据,如使用cin;  (使用cerr也会刷新缓冲区)

                           3.明确要求刷新,如endl(其作用为换行并刷新缓冲区,    <<endl;相当于<<"\n"<<flush;      但是用户感觉到的是输出字符串再换行!为什么步骤不一致  )

buffer是栈的一部分吗?

二、区别

cerr--无缓冲标准错误,发送给它的内容立即被输出,只能在显示器输出!   此当调用栈用完,没有缓冲区来用clog,这时候还有cerr!!!!!
clog(console log)--有缓冲标准错误,缓冲区满时或有需要时输出,在显示器输出
cout--有缓冲标准输出,通常在显示器输出,但是可以重定向输出到文件,如txt
三个都是ostream类定义的输出流对象,
cout是在终端显示器输出, cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据, 当向cout流插入一个endl, 不论缓冲区是否满了,都立即输出流中所有数据, 然后插入一个换行符.
cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出。 

三、重定向问题?


其他相关问题

难道语句分号也能刷新缓冲区?https://zhidao.baidu.com/question/568955123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值