收藏 分享(赏)

第5章 C++的输入输出流.ppt

上传人:j35w19 文档编号:12274597 上传时间:2021-12-08 格式:PPT 页数:14 大小:243.50KB
下载 相关 举报
第5章 C++的输入输出流.ppt_第1页
第1页 / 共14页
第5章 C++的输入输出流.ppt_第2页
第2页 / 共14页
第5章 C++的输入输出流.ppt_第3页
第3页 / 共14页
第5章 C++的输入输出流.ppt_第4页
第4页 / 共14页
第5章 C++的输入输出流.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、2009年1月 重庆理工大学计算机科学与技术系 共13页第1页 第5章C 的输入 输出流 重点 1 输入 输出操作符的使用 2 输入 输出操作符的重载 3 文件的输入 输出 4 输入 输出中的格式控制 5 示例系统的输入 输出类设计 2009年1月 重庆理工大学计算机科学与技术系 共13页第2页 5 1概述 C 的输入 输出流由iostream提供 iostream为内置数据类型提供了默认的输入 输出操作 用户可以通过扩展iostream来支持新数据类型的输入 输出 iostream类库的层次关系如右图 简化的iostream类层次结构 iostream类库中定义了三个标准的流对象cin 代表

2、标准输入的istream类对象 允许从用户终端读入数据 cout 代表标准输出的ostream类对象 允许向用户终端写数据 cerr 代表标准错误的ostream类对象 是导出程序错误消息的地方 在C 中 输出主要由左移操作符 来完成 C 还支持对文件和内存的输入 输出 他们分别由类ifstream ofstream和fstream以及istringstream ostringstream和stringstream来支持 2009年1月 重庆理工大学计算机科学与技术系 共13页第3页 5 2输出操作符 输出操作符可以接受任何内置数据类型的实参 包括constchar string comple

3、x 表达式和函数调用等 endl是一个ostream操作符 它把一个换行符插入到输出流中 再刷新ostream缓冲区 由于输出操作符 为左结合性 同时输出操作后的返回结果是一个ostream对象 所以多个输出操作符 可以连接在一起 5 2 1常见的输入 输出 5 2 2变量地址输出 默认情况下C 按十六进制输出地址值 默认情况下char 输出的是他所指向的字符串的内容 而不是地址 理解程序5 1 cpp 5 2 3输出操作符的优先级 理解并修改程序5 2 cpp 2009年1月 重庆理工大学计算机科学与技术系 共13页第4页 5 3输入操作符 考虑语句 while cin ival 语句表示

4、从标准输入读入一个序列 直到cin为false为止 当读到文件结束标记或遇到一个无效的输入值 cin 返回false 在读入一个无效值的情况下 cin被放置到一种错误的状态中 并且对于值的所有读入动作都将被停止 预定义的输入操作符可以接受任何的内置数据类型 如 数值的读操作 比 数值的写操作 更容易导致iostream错误 C 不推荐使用连接形式的的输入操作符 对于字符串的输入操作 C 推荐使用string类型 而不是char 理解程序5 3 cpp intitem number stringitem name doubleitem price cout item number cin ite

5、m name cin item price cout Thevaluesenteredare item item number item name item price endl 运行 从键盘输入 10247widget19 99回车 输出结果为 Thevaluesenteredare item 10247widget 19 99 2009年1月 重庆理工大学计算机科学与技术系 共13页第5页 5 4其它输入 输出方式 有些时候 不需要知道输入输出的具体数据类型 而只是按字节逐字读 写 get 一次读入一个字节 put 一次输出一个字节 这两个函数通常配合在一起使用 get 函数有三种形式 形

6、式一参见程序5 4 cpp 形式二参见程序5 5 cpp 形式三参见程序5 6 cpp istream ignore streamsizelength 1 intdelim traits eof 从输入流中读入并丢弃length个字符 或者遇到delimiter之前包含delimiter在内的所有字符 或者直到文件结尾 如程序5 6 cpp istream getline char sink streamsizesize chardelimiter n 功能跟get 的第三种形式类似 但是它直接丢弃delimiter而不是将其留作输入流的下一个字符 如程序5 7 cpp 5 4 1get 和p

7、ut 函数 2009年1月 重庆理工大学计算机科学与技术系 共13页第6页 write 输出固定长度的字符序列 read 从输入流中读入固定长度的字符序列 通过函数gcount 可以获取由最后一个read 调用提取的字节数 它们的函数原型如下 理解程序5 8 cpp 5 4 2read 和write 函数 ostream 5 4 2read 和write 函数 putback charc 将字符放回iostreampeek 返回下一个字符或EOF但不提取出来 以下代码判断输入的字符串是不是 charch next lookahead while cin get ch switch ch cas

8、e 查找 if next cin peek 用peek 看一看是不是 lookahead cin get 取出第2个 if next cin peek 查看下一个符号是不是 cin putback lookahead 2009年1月 重庆理工大学计算机科学与技术系 共13页第7页 5 5重载输出操作符 当实现一个类类型时 如果希望这个类支持输入和输出操作符 那么必须提供重载的输入和输出操作符的实例 输出操作符是一个双目操作符 它返回一个ostream引用 重载定义的通用框架如下所示 第1个参数是一个ostream对象的引用 第2个参数一般是一个特定类类型的const引用 返同类型是一个ostr

9、eam引用 且它的值总是该输出操作符所应用的ostream对象 因为第1个实参是一个ostream引用 所以输出操作符必须定义为非成员函数 当输出操作符要求访问非公有成员时 必须将它声明为该类的友元 理解程序5 9 cpp ostream 返回ostream对象 2009年1月 重庆理工大学计算机科学与技术系 共13页第8页 5 6重载输入操作符 跟输出操作符类似 重载输入操作符的通用框架如下所示 相对于输出操作符 输入操作符的重载更容易出错 理解程序5 10 cpp 由于不正确的格式而导致失败 istream应该把状态标记为fail is setstate ios failbit 如果ist

10、ream对象is处于错误状态 则对istream对象的操作一直无效 这就是while is ch is get 要双重判断的原因 istream 返回istream对象 2009年1月 重庆理工大学计算机科学与技术系 共13页第9页 5 7文件输入和输出 C 把文件看作字符序列 即文件是由一个个字符数据顺序组成的 根据数据的组织形式 可以把文件分为 文本 ASCII 文件 每个字节存放一个ASCII码 代表一个字符 二进制文件 把内存中的数据 按其在内存中的存储形式原样写到磁盘上存放 5 7 1ofstream类 ofstream类对象用于打开一个用来输出的文件 构造函数如下 szName 打

11、开的文件名称 nMode 打开模式 nPort 打开的文件的类型 nMode的取值为 在读写文件之前 应该先判断它是否已成功打开 ofstream从ostrearn类派生 所有ostream操作都可以应用到ofstream类对象上 理解程序5 11 cpp ofstream constchar szName intnMode ios out intnProt filebuf openprot ios app 打开一个已经存在的文件用于输出 使输出追加到文件尾部ios ate 以附加模式打开一个已经存在的文件用于输出 文件指针自动移到文件尾部ios in 打开一个已经存在的文件用于输入ios o

12、ut 打开一个文件用于输出 如果文件不存在则自动创建 该值为默认值ios trunc 打开一个文件用于输出 文件已经存在则删除原有内容 不存在则创建ios nocreate 打开一个文件 如果文件不存在则打开文件失败ios noreplace 打开文件 如果文件已经存在则打开文件失败ios binary 以二进制方式打开文件 2009年1月 重庆理工大学计算机科学与技术系 共13页第10页 5 7 2ifstream类 ifstream类对象用于打开一个用来输入的文件 构造函数如下 ifstream从istrearn类派生 所有istream操作都可以应用到ifstream类对象上 理解程序5

13、 12 cpp ifstream constchar szName intnMode ios in intnProt filebuf openprot 5 7 3使用open 函数打开文件 在定义ifstream和ofstream类对象时 也可以不指定文件 以后再通过成员函数open 显式地把一个文件连接到一个类对象上 通过open 打开的文件 使用完后要使用close 关闭 如程序5 13 cpp 5 7 4fstream类 fstream类对象可以打开一个用于输出或者输入的文件 理解程序5 14 cpp 2009年1月 重庆理工大学计算机科学与技术系 共13页第11页 5 7 5文件的随机

14、读写 dir可以被设置为以下选项之一 ios beg 文件的开始 ios cur 文件的当前位置 ios end 文件的结尾 理解程序5 15 cpp seekg pos typecurrent position 设置get指针到文件中固定的位置上seekg off typeoffset position ios seekdirdir get指针从当前位置偏移seekp pos typecurrent position 设置put指针到文件中固定的位置上seekp off typeoffset position ios seekdirdir put指针从当前位置偏移tellg 返回文件当前的g

15、et指针tellp 返回文件当前的put指针 2009年1月 重庆理工大学计算机科学与技术系 共13页第12页 5 8格式控制 5 8 1布尔量的输出控制操作符 默认情况下 true值的bool对象输出1 false输出0 可以采用boolalpha和noboolalpha操作符来改变这种输出格式 5 8 2带进制整数的输出控制操作符 默认情况下 整数以十进制形式进行读 写 可以使用hex oct和dec操作符 把整数的进制基数改为十六进制 八进制或改回十进制 浮点数不受影响 可以使用showbase和noshowbase操作符来控制是否输出进制标志字符 每一个iostream库对象都维护一个

16、格式状态 它控制格式化操作的细节 C 提供了一组预定义操作符 用来修改对象的格式状态 2009年1月 重庆理工大学计算机科学与技术系 共13页第13页 5 8 3浮点数输出控制操作符 默认情况下 浮点数的精度是6位 可以用成员函数precision int 或流操作符setprecision 来修改 使用操作符setprecision 时需要注意以下几点 整数值不受影响 浮点值被四舍五入而不是被截取 可以使用showpoint操作符来强制显示小数点 noshowpoint操作符重新设置为默认行为 可以使用scientific操作符后使浮点数改为科学计数法 再使用fixed操作符恢复到定点小数法 5 8 4输入控制操作符 默认情况下 输入操作符跳过空白字符 空格 制表符 换行符 走纸以及回车等 可以使用操作符noskipws使输入操作符不跳过空白字符 2009年1月 重庆理工大学计算机科学与技术系 共13页第14页 5 8 5刷新缓冲区控制操作符 文字字符串被存储在与cout相关联的缓冲区中 以下况可以引起缓冲区被刷新 缓冲区满时 显式地使用flush或endl操作符 通过设置unitbuf 5 8 6填充字符控制操作符 setw 操作符来控制数字或字符串值的宽度 left操作符控制左对齐 right操作符控制右对齐 setfill 操作符设置填充字符 理解程序5 16 cpp

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报