- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
抽象过程 *10.3.3 用户定义格式控制符 C++的I/O 系统还提供了自定义格式控制符的功能。格式控制符定义时采用函数形式。一般在下面两种情形下,由用户定义自己的格式控制符是有必要的。 (1) 用于输出空格的格式控制符: ostream sp(ostream outs){ return outs ;} 经过对于用户定义格式控制SP 的定义,它就可以在格式输出过程中使用。例如: coutaspGroup:sp43.75endl; (2) 也可以在I/O 格式控制中定义一些包含复合动作的控制符: istream hexin(istream in){ inhex;//输入数据时不用带前导符0x coutEnter number using hexadecimal format:; return in; }; ostream Bankout(ostream out){ out.setf(ios::left,ios::adjustfield); out$setw(12)setfill(#); return out; }; 完整程序见P10_6.cpp 10.7 其他输入输出控制函数 10.7.1 I/O 操作状态控制 在类ios 中定义了一个以枚举类型形式出现的I/O 的操作状态标志变量io_state: enum ios_state{ goodbit=0x00; //流处于正常状态 eofbit=0x01; //输入流结束,忽略下一抽取操作 failbit=0x02; //最后的I/O 操作失败,流可恢复 badbit=0x04; //最后的I/O 操作非法,流可恢复 hardfail=0x08; // I/O 出现致命错误,流不可恢复 } 读取I/O 状态位的函数有: int good(); // I/O 流正常返回非0,否则0 int eof(); //输入流状态字的eofbit 位为1 则返回 非0,否则返回0 int fail(); //流状态字的failbit,badbit 和 hardfail 中任一个置1,则返回非0, 否则返回0 int bad(); //流状态字的badbit,hardfail 位中任一 个置1 则返回非0,否则返回0 int rdstate(); //返回当前出错状态 int operator!(); //与函数fail()功能相同 注意:!等价于fail() 例如:if (!cout) 等价于 if (cout.fail()) if (cout) 等价于 if (!cout.fail()) 设置或清除状态位的函数: void clear(int ef=0) //无参调用可清除全部出错信息;带参,可人工设置位出错状态 这些函数的用法见后面文件操作的例子 *10.7.2 其它I/O 控制 1. 流的刷新 C++系统提供的流多为缓冲流,缓冲I/O 操作可提高效率,但有时也会产生问题。当显示内容被送入到一个未满的缓冲区时,它并不立即显示到屏幕上。这时在输入输出交互中,可能得不到预想的结果。期望在输入之前显示的内容可能在输入完成之后的某个时候才被输出。 利用刷新函数或刷新控制符可使输出内容从缓冲区中立即输出。 例如: char * pstr; coutEnter Password:; cinpstr; char * pstr; cout”Enter Password:”; cout.flush(); cinpstr; Cout”Enter Password:”flush; cinpstr; 对cin和cout没有必要进行刷新,系统已自动进行刷新。 2. 流的连接 流的连接(tie:系到一起)也与刷新有关,在ios 类中说明:ostream * ios::tie(ostream *); 该函数应由一输入流(对象)引用,以一个输出流为参数。调用结果是把这个输出流连接到输入流上,同时返回原来与该输入流连接的输出流的地址。 输出流outst 与输入流inst 连接之后,在流inst 的每次抽取(输入)操作之前都要对流outst 进行刷新。 C++的I/O 系统,已在缺省情况下把cout 连接到cin 上, 3. 输入流的简单操作 对于输入流除了采用抽取‘’操作顺序读入之外,类istream 中还给出几个简单的特别处理函数: peek(void)函数: 用来在“不输入”的条件下读出输入流的当前字符,这里所谓“不输入”就是用peek()函数读了当前字符后,该字符仍为输入流的当
文档评论(0)