C++程序设计基础-电子教案-杨长兴 第10章 输入输出流

上传人:E**** 文档编号:89383229 上传时间:2019-05-24 格式:PPT 页数:72 大小:390KB
返回 下载 相关 举报
C++程序设计基础-电子教案-杨长兴 第10章 输入输出流_第1页
第1页 / 共72页
C++程序设计基础-电子教案-杨长兴 第10章 输入输出流_第2页
第2页 / 共72页
C++程序设计基础-电子教案-杨长兴 第10章 输入输出流_第3页
第3页 / 共72页
C++程序设计基础-电子教案-杨长兴 第10章 输入输出流_第4页
第4页 / 共72页
C++程序设计基础-电子教案-杨长兴 第10章 输入输出流_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《C++程序设计基础-电子教案-杨长兴 第10章 输入输出流》由会员分享,可在线阅读,更多相关《C++程序设计基础-电子教案-杨长兴 第10章 输入输出流(72页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计基础,主编 杨长兴 中国水利水电出版社,第10章 输入输出流,10.1 C+的输入输出流 10.2 标准I/O 10.3 文件I/O 10.4 内存I/O,10.1 C+的输入输出流,C+的输入输出是以流(字节序列)的形式进行的 。 流既可以表示数据从内存传送到某个载体或设备中, 即输出流,也可以表示数据从某个载体或设备传送到 内存中,即输入流。 10.1.1 流的概念 1流与流类 C+的输入输出流是由若干字节组成的字节序列,这些字节中的数据按一定的顺序从一个对象传送到另一个对象。,从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。 C+提供了一些供程序设计者使用

2、的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。流是用流类定义的对象,如cin、cout 2流的分类 C+的流主要有两种分类标准: (1)文本流和二进制流 :按照数据的格式 (2)缓冲流与非缓冲流:按是否使用缓冲区,图 10.1 数据缓冲区,引入缓冲的主要目的是为了提供系统的效率。,3、流对象 C+的输入输出流对象主要有以下三种: 对系统指定的标准设备的输入输出,即从键盘输入数据,输出到屏幕。这种输入输出称为标准的输入输出,简称标准I/O。 以外存磁盘文件为对象进行的输入输出,称为文件的输入输出。 对内存指定的空间进行输入输出。通常指定一个字符数组作为存储空间,称为字

3、符串输入输出。,10.1.2 C+流类库,C+的流类库是用继承方法建立起来的输入输出类库,由支持标准输入输出操作的基类和支持特定种类的源和目标的输入输出操作的类组成。它具有两个平行的基类,所有其它的流类都是从它们直接或间接地派生出来的。 streambuf类:提供对流缓冲区的低级操作 ios类:提供对设备、文件的读写操作,图 10.2 C+流类体系,1基本I/O流类库 (1)基类ios (2)输入类istream (3)输出类ostream (4)输入输出类iostream 2文件I/O流类库 (1)ofstream类 (2)ifstream类 (3)fstream 类 3字符串I/O流类库

4、(1)ostrstream 类 (2)istrstream 类 (3)strstream类,10.1.3 与iostream类库有关的头文件,(1) iostream:包含对输入输出流进行操作的基本信息,提供无格式支持的低级输入输出和有格式支持的高级输入输出操作功能。 (2) fstream:包含管理文件输入输出操作的有关信息。 (3) strstrea:包含对内存中数据进行输入输出操作的有关信息。 (4) stdiostream:包含进行C风格的输入输出操作的有关信息。 (5) iomanip:包含输入输出流的格式控制符(manipulator)的有关信息。 当一个程序中需要进行标准流输入输

5、出操作时,则必须包含头 文件iostream;当需要进行文件流输入输出操作时,则必须 包含头文件fstream;当需要进行字符串流读/写操作时,则 必须包含头文件strstream。,10.1.4 插入与提取运算符的重载,“”本来在C+中被定义为左位移运算符和右位移运算符,由于在文件iostream.h中对它们进行了重载,使得它们能用作标准类型数据的输入输出运算符。从流中获取数据的操作称为提取操作,使用提取运算符“”;向流中添加数据的操作称为插入操作,使用插入运算符“”。,10.2 标准I/O,标准I/O是指数据在输入输出设备之间进行传输,其数据传递过 程包括以下四步: (1)格式化; (2)

6、缓冲; (3)编码转换:数据的计算机内部表示和字符序列表示之间的双向转换。例如整数的内部表示为二进制,而外部显示要转换成由数字字符和标志字符等符号组成的字符序列。 (4)传递:访问(读/写)外部设备。 流是一个抽象的概念,实际进行I/O操作时,必须将流与一种具体的物理设备联系起来。,10.2.1 标准输入输出流类,在键盘和屏幕上的输入输出称为标准输入输出。标准 流是不需要打开和关闭文件即可直接操作的流式文 件。在头文件iostream中,除了类的定义之外,还包 括四个对象的说明,它们被称为标准流或预定义流。 cin:类istream的对象,用来处理标准输入,即键盘输入。 cout:类ostre

7、am的对象,用来处理标准输出,即屏幕输出。 cerr和clog:类ostream的对象,与错误信息的标准输出设备(屏幕)相关联,前者为非缓冲方式,后者为缓冲方式。,1标准输入流 cin是由输入类istream的派生类istream_withassign定 义的对象,在缺省的情况下,cin所关联的外部设备为 键盘,实现从键盘上输入数据。 cin为缓冲流。 2标准输出流 在C+流类体系中定义的标准输出流是cout、cerr、 clog,是由输出类ostream的派生类ostream_withassign 定义的对象,在缺省的情况下,cout、cerr、clog 所关 联的外部设备为屏幕,实现数据流

8、输出到屏幕。 cout、 clog为缓冲流,而cerr为非缓冲流。,【例10.1】使用流cout和cerr实现数据的输出 。 /*ex10_1.cpp* #include using namespace std; void main( ) int a,b; cin ab; if(b=0) cerr“error!” else couta/b;,10.2.2 格式控制成员函数,数据输出的格式控制可通过两种途径实现:一种是使用预定义格式控制符,另一种是使用由ios类定义的格式控制成员函数。 预定义格式控制符分为带参数(如setw(n))的和不带参数(如dec)的两种,带参数的格式控制符在头文件iom

9、anip中定义,不带参数的格式控制符在头文件iostream中定义,使用它们时,程序中应包含相应的头文件;格式控制成员函数在头文件iostream中说明,要使用这类函数必须在程序中包含头文件iostream。,用于控制输出格式的常用的成员函数见表10.1,表10.1 常用的成员函数,流成员函数setf和控制符setiosflags括号中的参数表示格式状态,它是通过格式标志来指定的。格式标志在类ios中被定义为枚举值。因此在引用格式标志时要在签名加上类名ios和域运算符“:”。格式标志见表10.2。,表10.2 设置格式状态的格式标志,说明: 在用setf函数设置输出格式状态后,其设置的控制格式

10、将一直保持下去,直到用unsetf函数取消该格式设置为止。 在表10.2中的输出格式状态分为5组,每一组中同时只能选用一种(例如,dec、oct、 hex中只能选一个,它们是互相排斥的)。 用setf函数设置格式状态时,可以包含多个格式标志。这些格式状态标志在ios类中被定义为枚举值,每一个格式标志对应一个二进制位,因此可以用位或运算符“|”组合多个格式标志。,【例10.2】 将学生姓名与比赛得分通过初始化赋给数组name5、score5,指定姓名域宽为10个字符、左对齐,比赛得分为右对齐、用定点方式、小数点后有2位有效数字。 分析:浮点数默认的输出精度为6(即输出6位有效数字),例如浮点数3

11、456.7891 显示为3456.79。若要实现指定小数点后显示几位有效数字,应先用setf设置定点方式,再用成员函数precision(n)设置小数点后n位有效数字。,/*ex10_2.cpp* #include #include using namespace std; void main(void) char *name=“Zhou“,“Zhao“,“Liu“,“Chen“,“Li“; double score=89,87.2,78.33,91.444,85.5555; for (int i=0;i5;i+) cout.setf(ios:left); /设置左对齐 cout.width(

12、10); /设置域宽为10 coutnamei; cout.unsetf(ios:left); cout.setf(ios:fixed); /设置定点方式 cout.precision(2); /设置小数点后2位有效数字 coutscorein; ,程序的运行结果如下:,10.2.3 字符输入输出函数 字符的输入输出除了可以用cin、cout外,还可以用iostream类流对象的一些成员函数。 (1)字符输入成员函数 成员函数get()可以从输入流中获取字符,并将它存放在指定的变量中。该函数有以下两种格式: ch=cin.get() cin.get(ch) 函数实现从输入流中读取一个字符,赋给

13、字符变量ch。采用第2种格式时,如果读取数据成功则函数返回非0值(真),否则(遇结束标志符)返回0值(假)。,【例10.3】 使用字符输入成员函数读取字符。 /*ex10_3.cpp* #include using namespace std; void main(void) char c1,c2,c3; cout“输入字符:“; c1=cin.get(); cin.get(c2); cin.get(); /读入空白字符 cin.get(c3); cout“c1=“c1endl; cout“c2=“c2endl; cout“c3=“c3endl; ,程序运行结果:,(2)字符串输入成员函数 从

14、输入流中一次读取一串字符,有以下2种方式: cin.get(字符数组或字符指针,字符个数n,终止字符) cin.getline(字符数组或字符指针,字符个数n,终止字符) 两种方式均实现从输入流中读取n1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),否则(遇文件结束符)返回0值(假)。第三个参数缺省为换行符。,【例10.4】 使用字符串成员函数读取字符串。 程序代码如下: /*ex10_4.cpp* #include using namespace std; void main(void) c

15、har str120,str220; cout“输入2行字符串:“; cin.getline(str1,20); cin.get(str2,20); cout“str1=“str1endl; cout“str2=“str2endl; ,程序的运行结果如下:,说明: 用getline()函数提取字符串时,当实际提取的字符个数小于第二个参数指定的字符个数时,遇到字符串结束标志字符时结束,指针定位于该结束标志之后,下一个输入成员函数将从该结束标志的下一个字符开始继续读入。如果用get函数从输入流中读取字符时,遇到字符串结束标志字符时停止读取,指针定位于该结束标志,下一个输入成员函数将读入该结束标志。

16、本例中如果交换两条输入语句顺序,如下所示: cin.get(str1,20); cin.getline(str2,20); 则运行结果变为: 输入2行字符串:This is a book. str1= This is a book. str2=,(3)字符输出成员函数 函数put()用于输出单个字符,格式如下: cout.put(char c); put函数的参数c可以是字符或字符的ASCII码,例如: cout.put(a); /在屏幕上显示字符a cout.put(a+5); /在屏幕上显示字符f 由于该函数的返回类型为ostream类对象的引用,所以可以被串联使用,例如: cout.put(C).put(+).put(+);/在屏幕上显示C+,(4)字符

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号