C/C++的流(stream)对象

本文详细介绍了C/C++中的各种流对象,包括istream、ostream等,并解释了它们的作用及如何处理不同类型的输入输出。此外,还深入探讨了流状态及其相关标志,包括badbit、eofbit、failbit和goodbit的含义及其区别。

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

原文链接
C/C++有以下几种流对象的:

型别 名称 作用

istream cin 从input通道读入数据

ostream cout 将数据写到标准output通道

ostream cerr 将错误信息写到标准error通道

ostream clog 将日志信息写到标准logging通道

wistream wcin 从input通道读入宽字符数据

wostream wcout 将宽字符数据写到标准output通道

wostream wcerr 将宽字符错误信息写到标准error通道

wostream wclog 将宽字符日志信息写到标准logging通道

注意,以上对象均是全局对象,这意味着在多线程环境中使用它们时要非常小心,尤其是最常用的标准输入输出流(cin和cout)。

stream维护着一种状态,标志I/O是否成功,并且能够指明失败的原因。

stream定义了一些类型为iostate的产生过户来反映stream的状态。

这些状态(iostate类型)是ios_base的成员:

static const iostate badbit,eofbit,failbit,goodbit;

其意义如下:

badbit 毁灭性的错误,未定义的(不确定的)状态

eofbit 遇到end-of-file

failbit 错误,某个I/O操作未成功

goodbit 一切都好,没有其他状态位被设立

其中,failbit和badbit的却别在于:

failbit表示某项操作未能完成,单stream大体OK,通常是读入格式错误,如要读一个int值,输入的却是字符串(通常是可以挽回的)。

badbit表示因不明原因丢失或损坏数据,如将stream定位于文件起始端的前方(通常是不可挽回的)。

注意,通常eofbit和failbit同时出现,因为在end-of-file之后读取操作也会失败!

这些状态的常量定义域ios_base类里,并非全局的,因此使用的时候需要加上域作用符(ios_base或者其子类),如:

std::ios_base::eofbit,std::ios::eofbit ///(ios派生自ios_base)
C++还定义了一些处理stream状态的成员函数:

good() 若stream正常无误则返回true(表示goodbit成立)

eof() 若遇到end-of-file则返回true(表eofbit成立)

fail() 若发生错误则返回true(表failbit||badbit成立)

bad() 若发生毁灭性错误则返回true(表badbit成立)

rdstate() 返回当前stream已设立的所有标志

clear() 返回当前stream所有标志

clear(state) 返回当前stream所有标志后,设立state

setstate(state) 追加标志state

后三个常用于异常处理。

关于4个状态标志的解释:

1.输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit、badbit、failbit三个标记位均为0时表示流状态正常。

2.一但某个或几个标记位被设置,表示对象的流状态出现相应状况,流将对后面的输入(输出)关闭,直到标记位被清除。

3.只有在流状态良好(goodbit)的情况下,if或者while对该输入(输出)对象的判断才能是true。

复制代码
if(cin>>input)
cout<

include

include

include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值