C++输入输出流.ppt
《C++输入输出流.ppt》由会员分享,可在线阅读,更多相关《C++输入输出流.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章 输入输出流1本章学习要求:o流的概念oC+中I/O处理类层次结构o基于控制台、文件以及字符串的I/O处理210.1 流310.1.1 流的概念计算机中的数据从一个设备到另一个设备的传输,我们就称为数据流(可以想象数据是从一个设备流向另一个设备)。输入/输出的任务实际上就是以一种稳定、可靠的方式在任何设备与内存之间传输数据流。从内存输出到设备的数据流称为输出流(Outputstream);从设备输入到内存的数据流称为输入流(Inputstream)。410.1.2 I/O流的层次结构外部设备程序变量传输管道(字节流)程序尽量不要直接和千变万化的外部存储设备打交道。按照如此想法设计的输入
2、/输出的逻辑结构如图10-1所示。输入输出的逻辑结构传输管道内传输的是字节流,因为任何数据都是以字节为单位保存的。传输管道的左边负责将字节流转换成各种类型的值保存到内存变量,或将内存变量值转换成字节流。传输管道的右边负责将字节流交给外部设备,或将外部设备存储的数据转换成字节流放到管道中。外部设备不关心传递过来的数据是什么类型,只是按照自己的方式将一个个字节保存起来。传输管道的右边负责和具体的外部设备交互,它也不需要知道设备是如何存储数据,只要知道如何将字节流交给外部设备即可。5若将传输管道看作实现I/O功能的流对象,则一个流对象结构上可以分为两层:格式化层和传递层,如图10-2所示。内存产格式
3、化层传递层外部设备I/O流对象格式化层:进行格式化或解析,例如将数据由内存表示转换成指定格式的字节表示,或将字节表示转换成内存中变量格式。传递层:负责缓冲、编码转换和将字符序列传递到外部设备或从外部设备读入字符流。格式化层的主要任务是在输入时负责解析从外部设备读入的字节流,而在输出时负责格式化和产生能输出到外部设备字节流。610.2 C+I/O类库概览 710.2.1 C+I/O类库层次结构 iosiostreamfstreamstringstreamstreambufistreamstreambufostreamfilebuffilebufstringbufstringbufistrings
4、treamifstreamofstreamostringstreamstringbuffilebufios_baseC+流类层次结构中,除了ios_base类外,其他的流类几乎都是模板类。C+中流类层次结构如图所示。810.2.2 I/O基本类的成员及功能1.ios_baseios_base类是非模板类,该类定义了一些输入/输出流类中都具有的函数,以及输出/输出过程中使用的状态标志。2.iosios类定义了一些基础的输入/输出功能.3.istreamistream类定义用来实现输入的基本功能,所有其他实现从具体外部设备输入的流类都必须从其继承。4.ostreamostream类定义用来实现输出
5、的基本功能,所有其他实现向具体外部设备输出的流类都必须从其继承。5.操纵符操纵符(manipulator)也称为控制器函数,是为了简化对I/O流的格式设置和简化流的常用操作而定义的一些inline函数,通过调用这些函数可以设置对应流的输出格式。要在程序中使用操纵符,必须采用#include指令来包含iomanip头文件。910.3 基于I/O类库的控制台I/OC+I/O类库中预定义了四个控制台I/O对象cin、cout、cerror和clog,含义如表所示。对象名类型功能cinistream处理标准输入,即键盘输入coutostream处理标准输出,即屏幕输出cerrostream处理标准出错
6、信息clogostream处理日志信息利用这些对象可以直接进行控制台的输入/输出。其中cin对应着计算机系统的标准输入设备,通常为键盘;cerr以及clog对应着计算机系统的用于输出信息的设备,通常情况下为显示器。基于控制台的I/O,需要包含下列指令:#include1010.3.1 控制台输出1.基本数据类型的输出ostream类重载了操作符提供对基本数据类型数据输出的支持。例例 向控制台输出基本数据类型变量的值。#includeusingnamespacestd;intmain()charch=a;shorts=100;inti=200;longl=1000;unsignedshortus
7、=234;floatf=3.23;doubledf=1.55;charstr=C+IOisveryeasy!;coutchendl;coutsendl;coutiendl;coutlendl;coutusendl;coutfendl;coutdfendl;cout&iendl;coutstr;return0;112.格式化输出数据通常需要按照某种预定义的报表格式进行输出。下面介绍C+I/O中常见的格式控制。C+中的格式化输出通过设置某些标志进行控制,C+已经定义一些操纵符来简化某些格式标记的设置,下面的演示程序以操纵符的使用为主。(1)整数输出通过操纵符hex、oct、dec来实现输出的基数的
8、控制。例例采用十进制、十六进制、八进制分别显示一个整数。#include#includeusingnamespacestd;intmain()intx=100;coutxendl;/默认采用十进制输出couthexxendl;/采用十六进制输出coutshowbaseoctxendl;/采用八进制输出,并输出前缀0coutdecxendl;/采用十进制输出return1;12(2)浮点数输出浮点数字的输出可以采用定点格式和科学计数法两种,采用操纵符fixed、scientific来控制,同时可以通过setprecision来设置浮点数的精度。例例 分别以定点数和科学计数法输出浮点数。#incl
9、ude#includeusingnamespacestd;intmain()doublef=94.873;coutfixedf;/以定点格式输出,带小数点coutscientificfendl;/科学计数法/setprecision(2)设置小数点后有2位有效数coutsetprecision(2)fixedfscientificfendl;13(3)布尔类型输出布尔类型的数据输出可以采用两种方式:字符串(输出true或false)、数字(输出表示真的1或表示假的0)。分别采用boolalpha和noboolalpha操纵符来选择这两种方式。例例分别采用字符和数字方式输出布尔值。#includ
10、e#includeusingnamespacestd;intmain()boolb1=true,b2=false;coutb1b2endl;coutboolalphab1b2endl;coutnoboolalphab1b2endl;14(4)控制输出宽度有时在发票上,了使打印机输出的内容和发票的样式能够对应上,需要使输出项的输出宽度不小于某个宽度,若输出项自身的宽度大于指定的宽度,则使用输出项自身的宽度。输出宽度的设置可以通过操作符setw。例例将学生姓名和成绩按照上下对齐方式打印。#include#includeusingnamespacestd;intmain()doublevalues=
11、89.5,78,92.5,84;char*names=Zoot,Jimmy,Allen,Stan;for(inti=0;i4;i+)coutsetw(10)namesisetw(10)valuesiendl;15(5)对齐上例中输出项默认都是靠左边对齐的,可以通过left、right等控制输出项的对齐方式,如10.5中的输出语句改为:coutleftsetw(10)namesisetw(6)valuesiendl;16(6)填充字符可以使用fill操纵符来指定在指定宽度的输出中,采用的填充字符,默认的为空格.例例 将姓名和成绩按照固定宽度对齐输出,并利用*填充空白部分。#include#inc
12、ludeusingnamespacestd;intmain()doublevalues=89.5,78,92.5,84;char*names=Zoot,Jimmy,Allen,Stan;cout.fill(*);for(inti=0;i4;i+)coutsetw(10)namesisetw(10)valuesiendl;173.其他输出函数C+中,除了使用操作符实现输出功能以外,也可以使用输出流对象的put、write函数实现数据的输出。函数原型见表10-5。这些成员函数既可用于ASCII文本流,也可用于二进制流,尤其适用于二进制流输出。例例使用put函数输出数据。#includeusingn
13、amespacestd;intmain()couta,bn;cout.put(a);cout.put(,);cout.put(b);cout.put(n);charc1=A,c2=B;cout.put(c1);cout.put(,);cout.put(c2);18例例使用write函数输出数据。#includeusingnamespacestd;voidPrintString(char*s)cout.write(s,strlen(s).put(n);/write返回的是一个输出流对象cout.write(s,6)n;intmain()charstr=Iloveyou?;coutThestrin
14、gis:str)来实现数据的输入。使用运算符输入数据时,系统跳过开头空白符(包括:空格()、制表符(t)、换行符(n)、流结束符),然后提取待输入数据类型中所具有的符号。1.整数输入使用输入整数时,系统跳过开头的空白字符然后读取一个数字,直到遇到非数字字符。整数的输入可以采用十进制、八进制、十六进制三种格式。例例 采用十进展制、十六进制、八进制输入整数。#include#includeusingnamespacestd;intmain()intx,y,z;cinx;/默认输入流中的整型数据为10进制格式cinhex;/设置输入流中的整型数据为16进制格式ciny;cinoctz;/采用8进制输
15、入整数值coutxyz;/默认采用十进制输出数值202.浮点数输入浮点数的输入可以采用定点数和科学计数法两种格式。例例输入浮点数。#include#includeusingnamespacestd;intmain()doubled,d1,d2;floatf,f1,f2;cindf;/默认输入的数字是浮点数格式cinscientific;/指定输入的数字是科学计数法格式cind1f1;cinfixedd2f2;/指定输入的数字是浮点数格式/默认采用定点数格式输出coutdd1d2endl;coutff1f2;213.布尔类型的输入布尔类型的输入可以采用两种格式:字符方式(true和false)、
16、数字方式(1和0)。例例 输入布尔类型值。#include#includeusingnamespacestd;intmain()boolb1,b2,b3,b4;cinboolalpha;/设置输入的布尔值是true或false格式的cinb1b2;cinnoboolalphab3b4;/设置输入的布尔值是1或0格式的/默认采用数字方式输出布尔值coutb1b2b3b4;coutboolalpha;/采用true或false格式输出布尔值coutb1b2b3b4从输入流抽取字符串时,有两种终止方式:遇到空白字符。如果使用setw时,只能抽取固定数目的字符。例例输入字符串。#include#inc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 输入输出
限制150内