资源预览内容
第1页 / 共88页
第2页 / 共88页
第3页 / 共88页
第4页 / 共88页
第5页 / 共88页
第6页 / 共88页
第7页 / 共88页
第8页 / 共88页
第9页 / 共88页
第10页 / 共88页
亲,该文档总共88页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章 输入输出流,7.1 流类和流对象,7.2 标准IO流和流对象,7.3 格式控制,7.4 文件处理,本 章 内 容- 第一讲,1、输入输出流的含义 流类与流对象 2、标准输入输出流 标准IO流对象 IO流成员函数 - get(), getline() 与 - put(), 流状态及函数 clear(), good(), eof(),本 章 内 容 -第二讲,3、文件流及文件操作 文件的概念 数据流动方向, 文本文件与二进制文件 文件流类与文件流对象 文件的打开与关闭 打开方式 顺序读写/ 随机读写操作 文件指针 文件操作成员函数 , put, get(), getline(), read(), write(),第7章 输入输出流,流(stream)表示信息从源到目的端的流动, 负责建立数据生产者和消费者之间的联系, 数据按顺序从一个对象传送到另一对象。,C+中把数据之间的传输操作称作”流”,I/O系统的任务就是在内存和外部设备之间稳定可靠 地传输数据和解释数据。 程序中,对数据的输入/输出是以字节流实现的 应用程序对字节序列作出各种数据解释. C+的输入输出流是指由若干字节组成的字节序列 流中的内容可以是ASCII字符、图形图像、数字音频视频等形式的信息。,7.1 IO流,7.1 IO流,I/O流类库提供对象之间的数据交互服务 输出流Output stream:数据从内存传送到某个载体或设备中; 输入流 Input stream:数据从某个载体或设备传送到内存中;,_ _ 内存 _ _,输入数据,输出数据,7.1.1 缓冲区,缓冲区buffer是内存中的一个临时存储区, 用来匹配不同部件数据传输率的差异。 通过使用缓冲的方式可以更高效地处理输入输出, 信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地。,在C+中输入输出流被定义为类,I/O库中的类称为流类,编译系统提供了用于输入输出的iostream类库。 流类中的常用类的继承层次关系,7.1.2 流类,(1)标准流 提供通用输入输出操作, 作为其他I/O流基类 系统指定的标准设备的I/O操作。 (2)文件流 以外存中的文件为对象进行输入和输出。 以文件为对象的输入输出,包括从磁盘文件输入数据, 或将数据输出到磁盘文件。 (3)字符串流 对内存中指定空间进行输入和输出。 通常指定一个字符数组作为存储空间。,7.1.2 流类,iostream.h 包含操作所有输入/输出流所需的基本信息 istream.h , ostream.h iomanip.h 包含格式化I/O操纵算子,用于指定数据输入输出的格式 fstream.h 处理文件信息,包括建立文件,读/写文件的各种操作接口 每一种C+版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能,7.1.2 头文件,I/O流类库预定义了一批流对象,连接常用的外部设备. 程序员可以定义所需的I/O流对象, 使用流库提供的工作方式实现数据传输。 流类对象可以建立和删除,可从流中获取数据和向流添加数据。,7.1.3 流对象,istream cin,ostream cout,输入流对象,_ _ 内存 _ _,输出流对象,7.2 标准流对象及常用成员函数,标准流对象是在std命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。 声明在头文件iostream,7.2.1 标准输出流,cout ostream 类的对象(console output) 通常连向显示器,可以重定向(关联至文件) 在输出流类中重载的一组公用成员函数,实现安全便捷的输出基本数据类型,输出自定义类型对象需要单独重载 ostream Array( ) ; int ,例 为数组类重载流插入运算符和提取运算符,Array a(5); cin a; cout a;,6.3.4 重载流插入和流提取运算符,ostream ,使用重载版本访问对象 cout a endl;,cout 的别名,istream ,返回流类引用, 符合原语义 cin arr1 arr2;,cin 的别名,istream类的公有成员函数,7.2.4 输入流操作,int istream :get(); /char c = cin.get(); istream get.cpp,istream类的公有成员函数,7.2.4 输入流操作,istream 其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符) 则函数返回0值(假)。 读取完成后,从流中删除该终止符。 Get_getline.cpp,7.2.4 输入流操作,/ 字符串的输入 char ch120,ch220,ch320,ch420; cinch1; coutch1endl; cin.get(ch2, 10); coutch2endl; cin.get(ch3, 20); coutch3endl; cin.get(ch4,20,.); coutch4endl;,istream,istream类的公有成员函数,7.2.4 输入流操作,7.2.5 流错误状态,所有流都把流的状态存储在状态字中 不同标志位中存储不同的错误状态位 包含在类ios的enum成员中,ios 处理流错误状态的公有成员函数,7.2.4 流错误状态,运行程序,观测结果 grade.cpp streamstate.cpp,ios提供直接设置标志字的控制格式函数 iostream和iomanip库还提供控制符简化I/O格式化操作 (自学内容),7.3 格式控制,ios类格式化标志,格式化标志是类定义的枚举集合,用来指定输入输出格式化和操作的不同选择。 该枚举类型定义: enum skipws, left, right, internal, dec, oct, hex, showbase, showpoint, uppercase, showpos, scientific, fixed, unitbuf, stdio ; 引用格式化标志: ios:格式化标志,7.3.1 设置标志字,状态标志 值 含义 输入/输出 skipws 0X0001跳过输入中的空白I left 0X0002左对齐输出O right 0X0004右对齐输出O internal 0X0008在符号位和基指示符后填入字符O dec 0X0010转换基制为十进制I/O oct 0X0020转换基制为八进制I/O hex 0X0040转换基制为十六进制I/O showbase 0X0080在输出中显示基指示符O showpoint 0X0100输出时显示小数点O uppercase 0X0200十六进制输出时一律用大写字母O showpos 0X0400正整数前加“+”号O scientific 0X0800科学示数法显示浮点数O fixed 0X1000定点形式显示浮点数O unitbuf 0X2000输出操作后立即刷新流O stdio 0X4000输出操作后刷新stdout 和 stdreeO,ios 的标志常量,7.3.1 设置标志字,ios 控制格式的函数,/例4 设置输出宽度 #include void main() char *s = Hello; cout.fill( * ) ;/ 置填充符 cout.width( 10 ) ;/ 置输出宽度 cout.setf( ios : left ) ;/ 左对齐 cout s endl ; cout.width( 15 ) ;/ 置输出宽度 cout.setf( ios : right, ios : left ) ;/ 清除左对齐标志位,置右对齐 cout s endl ; ,#include void main() int a , b , c ; cout a ; cout b ; cout c ; cout Output in decimal :n ; cout.setf( ios : dec, ios : basefield ); cout a = a b = b c = c endl ; cout.setf( ios : hex , ios : basefield ) ; cout Output in hexadecimal :n ; cout a = a b = b c = c endl ; cout.setf( ios : oct , ios : basefield ) ; cout Output in octal :n ; cout a = a b = b c = c endl ; ,/ 置八进制输出,/ 置十六进制输出,/ 置十进制输出,/ 置八进制输入,/ 置十进制输入,/ 置十六进制输入,例5 不同基数形式的输入输出,#include void main() double x = 22.0/7 ; int i ; cout output in fixed :n ; cout.setf( ios:fixed | ios:showpos ) ;/ 定点输出,显示 + for( i=1; i=5; i+ ) cout.precision( i ) ; cout x endl ; cout output in scientific :n ; / 清除原有设置,科学示数法输出 cout.setf(ios:scientific, ios:fixed|ios:showpos ) ; for( i=1; i=5; i+ ) cout.precision(i) ; cout x*1e5 endl ; ,例6 格式化输出浮点数,控制符是istream和ostream类定义了一批函数, 作为重载插入运算符的右操作数 控制I/O格式,7.3.2 格式控制符,7.3.2 格式控制符,iostream几个常用的控制符,例7 不同基数形式的输入输出,cin dec a ;,cin hex b ;,cin oct c ;,cout octa = a b = b c = cendl ;,cout a = a b = b c = cendl ;,cout hexa = a b = b c = cendl ;,7.3.2 格式控制符,iomanip的控制符,常用控制符与成员函数,/ 例8 整数的格式化输出 #include #include using namespace std ; void main() const int k = 618 ; cout setw(10) setfill(#) setiosflags(ios:right) k endl ; cout setw(10) setbase(8) setfill(*) resetiosflags(ios:right) setiosflags(ios:left) k endl ; ,#include
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号