C++学习笔记之I/O库

国际字符的支持
所描述的流类(stream class)读写的是由 char 类型组成的流。此外,标准库还定义了一组相关的类型,支持 wchar_t 类型。每个类都加上“ w”前缀,以此与 char 类型的版本区分开来。于是, wostreamwistreamwiostream 类型从控制窗口读写 wchar_t 数据。相应的文件输入输出类是 wifstreamwofstreamwfstream。而 wchar_t 版本的 string 输入/输出流则是 wistringstreamwostringstreamwstringstream。标准库还定义了从标准输入输出读写宽字符的对象。这些对象加上“ w”前缀,以此与 char 类型版本区分: wchar_t 类型的标准输入对象是 wcin;标准输出是 wcout;而标准错误则是 wcerr
表 8.2. IO 标准库的条件状态

strm::iostate


机器相关的整型名,由各个 iostream 类定义,用于定义条件状态

strm::badbit

strm::iostate value used to indicate that a stream is corrupted.

strm::iostate 类型的值,用于指出被破坏的流

strm::failbit

strm::iostate value used to indicate that an IO operation failed.

strm::iostate 类型的值,用于指出失败的 IO 操作

strm::eofbit

strm::iostate value used to indicate the a stream hit end-of-file.

strm::iostate 类型的值,用于指出流已经到达文件结束符

s.eof()

true if eofbit in the stream s is set.

如果设置了流 seofbit 值,则该函数返回 true

s.fail()

true if failbit in the stream s is set.

如果设置了流 sfailbit 值,则该函数返回 true

s.bad()

true if badbit in the stream s is set.

如果设置了流 sbadbit 值,则该函数返回 true

s.good()

true if the stream s is in a valid state.

如果流 s 处于有效状态,则该函数返回 true

s.clear()

Reset all condition values in the stream s to valid state.

将流 s 中的所有状态值都重设为有效状态

s.clear(flag)

Set specified condition state(s) in s to valid. Type of flag is strm::iostate.

将流 s 中的某个指定条件状态设置为有效。flag 的类型是 strm::iostate

s.setstate(flag)

Add specified condition to s. Type of flag is strm::iostate.

给流 s 添加指定条件。flag 的类型是 strm::iostate

s.rdstate()

Returns current condition of s as an strm::iostate value.

返回流 s 的当前条件,返回值类型为 strm::iostate

badbit 标志着系统级的故障,如无法恢复的读写错误。如果出现了这类错误,则该流通常就不能再继续使用了。如果出现的是可恢复的错误,如在希望获得数值型数据时输入了字符,此时则设置 failbit 标志,这种导致设置 failbit 的问题通常是可以修正的。eofbit 是在遇到文件结束符时设置的,此时同时还设置了 failbit

条件状态的访问

rdstate 成员函数返回一个 iostate 类型值,该值对应于流当前的整个条件状态:

     // remember current state of cin
     istream::iostate old_state = cin.rdstate();
     cin.clear();
     process_input();  // use cin
     cin.clear(old_state); // now reset cin to old state
输出缓冲区的刷新

我们的程序已经使用过 endl 操纵符,用于输出一个换行符并刷新缓冲区。除此之外,C++ 语言还提供了另外两个类似的操纵符。第一个经常使用的 flush,用于刷新流,但不在输出中添加任何字符。第二个则是比较少用的 ends,这个操纵符在缓冲区中插入空字符 null,然后后刷新它:

    cout << "hi!" << flush;      // flushes the buffer; adds no data
    cout << "hi!" << ends;       // inserts a null, then flushes the buffer
    cout << "hi!" << endl;       // inserts a newline, then flushes the buffer


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值