第14讲 输入输出流.ppt
《第14讲 输入输出流.ppt》由会员分享,可在线阅读,更多相关《第14讲 输入输出流.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 前一页 休息第第十三讲十三讲 输入输出流输入输出流C+语言程序设计 前一页 休息主要内容主要内容l13.1 C+的输入和输出的输入和输出l13.2 标准输出流标准输出流l13.3 标准输入流标准输入流l13.4 文件操作与文件流文件操作与文件流l13.5 字符串流字符串流l 以前所用到的输入和输出,都是以终端为对象的,即以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从键盘输入数据,运行结果输出到显示器屏幕上。l 除了以终端为对象进行输入和输出外,还经常用磁盘除了以终端为对象进行输入和输出外,还经常用磁盘(光盘光盘)作为输入输出对象,磁盘文件既可以作
2、为输入文作为输入输出对象,磁盘文件既可以作为输入文件,也可以作为输出文件。件,也可以作为输出文件。l 程序的输入指的是从输入文件将数据传送给程序,程程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。序的输出指的是从程序将数据传送给输出文件。13.1 C+的输入和输出的输入和输出 13.1.1 输入输出的含义输入输出的含义C+的输入与输出包括以下的输入与输出包括以下3方面的内容方面的内容:(1)对系统指定的标准设备的输入和输出。即从键盘输入对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入数据,输出到显示器屏幕。
3、这种输入输出称为标准的输入输出,简称标准输出,简称标准I/O。(2)以外存磁盘文件为对象进行输入和输出,即从磁盘文以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件输入输出称为文件的输入输出,简称文件I/O。(3)对内存中指定的空间进行输入和输出。通常指定一个对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间字符数组作为存储空间(实际上可以利用该空间存储任何信实际上可以利用该空间存储任何信息息)。这种输入和输出称为字符串输入输出,简称串。这种输入和
4、输出称为字符串输入输出,简称串I/O。C+采取不同的方法来实现以上采取不同的方法来实现以上3种输入输出。种输入输出。为了实现数据的有效流动,为了实现数据的有效流动,C+系统提供了庞大的系统提供了庞大的I/O类库,类库,调用不同的类去实现不同的功能。调用不同的类去实现不同的功能。l 在在C+的输入输出中,编译系统对数据类型进行严格的检的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。因此查,凡是类型不正确的数据都不可能通过编译。因此C+的的I/O操作是类型安全操作是类型安全(type safe)的。的。l C+的的I/O操作是可扩展的,不仅可以用来输入输出标准
5、操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。类型的数据,也可以用于用户自定义类型的数据。C+对标对标准类型的数据和对用户声明类型数据的输入输出,采用同准类型的数据和对用户声明类型数据的输入输出,采用同样的方法处理。样的方法处理。l C+通过通过I/O类库来实现丰富的类库来实现丰富的I/O功能。功能。C+的输入输出的输入输出优于优于C语言中的语言中的printf和和scanf,但是比较复杂,要掌握许多但是比较复杂,要掌握许多细节。细节。13.1.2 C+的的I/O对对C的发展的发展类型安全和可扩展性类型安全和可扩展性l C+的输入输出流是指由若干字节组成的
6、字节序列,这些的输入输出流是指由若干字节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。流表示了字节中的数据按顺序从一个对象传送到另一对象。流表示了信息从源到目的端的流动。信息从源到目的端的流动。l 在输入操作时,字节流从输入设备在输入操作时,字节流从输入设备(如键盘、磁盘如键盘、磁盘)流向内流向内存,在输出操作时,字节流从内存流向输出设备存,在输出操作时,字节流从内存流向输出设备(如屏幕、打如屏幕、打印机、磁盘等印机、磁盘等)。l 流中的内容可以是流中的内容可以是ASCII字符、二进制形式的数据、图形图字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。像、数字音
7、频视频或其他形式的信息。l 在内存中为每一个数据流开辟一个内存缓冲区,用来存放在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。流是与内存缓冲区相对应的,或者说,缓冲区流中的数据。流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。中的数据就是流。13.1.3 C+的输入输出流的输入输出流 前一页 休息I/O流的结构流的结构流类库i/ostreamistreamostreamiosios类提供关于对流状态进行设置的功能,它是一个基类istream类提供向流中插入数据的有关操作ostream类提供从流中提取数据的有关操作streambufstreambuf类是为ios类及其派生类
8、提供对数据的缓冲支持上面类派生定义了几个描述文件抽象的类:上面类派生定义了几个描述文件抽象的类:ifstreamifstream类:从类:从istreamistream类派生的,功能是对文件进行输入操作类派生的,功能是对文件进行输入操作ofstreamofstream类:从类:从ostreamostream类派生的,功能是对文件进行输出操作类派生的,功能是对文件进行输出操作fstreamfstream类:对文件进行插入和提取操作类:对文件进行插入和提取操作filebuffilebuf类:从类:从streambufstreambuf类派生的,作为上述类的缓冲支持类派生的,作为上述类的缓冲支持图图
9、13.2I/O类库中还有其他类,见图类库中还有其他类,见图13.3。图图13.3l C+编译系统提供了用于输入输出的编译系统提供了用于输入输出的iostream类库。在类库。在iostream类库中包含许多用于输入输出的类。类库中包含许多用于输入输出的类。l ios是抽象基类,由它派生出是抽象基类,由它派生出istream类和类和ostream类。类。istream类支持输入操作,类支持输入操作,ostream类支持输出操作。类支持输出操作。iostream类是从类是从istream类和类和ostream类通过多重继承而派类通过多重继承而派生的类。它支持输入输出双向操作,其继承层次见图生的类。
10、它支持输入输出双向操作,其继承层次见图13.1表表示。示。1.iostream类库中有关的类类库中有关的类头文件是程序与类库的接口,头文件是程序与类库的接口,iostream类库的接口分别类库的接口分别由不同的头文件来实现。常用的有由不同的头文件来实现。常用的有iostream包含了对输入输出流进行操作所需的基本信息。包含了对输入输出流进行操作所需的基本信息。fstream用于用户管理的文件的用于用户管理的文件的I/O操作。操作。strstream用于字符串流用于字符串流I/O。stdiostream用于混合使用用于混合使用C和和C+的的I/O机制时。机制时。iomanip在使用格式化在使用格
11、式化I/O时应包含此头文件。时应包含此头文件。2.常见与常见与iostream类库有关的头文件类库有关的头文件 前一页 休息3.系统定义的系统定义的I/O流类流类对象对象l“”本来在本来在C+中是被定义为左位移运算符和右位中是被定义为左位移运算符和右位移运算符的,由于在移运算符的,由于在iostream头文件中对它们进行了重载,头文件中对它们进行了重载,使它们能用作标准类型数据的输入和输出运算符。使它们能用作标准类型数据的输入和输出运算符。l在用它们的程序中必须用在用它们的程序中必须用#include l输出操作由重载的插入符输出操作由重载的插入符“”实现实现l系统预定好了系统预定好了4个流类
12、对象,供用户使用:个流类对象,供用户使用:cin:它是istream类的对象,用来处理标准输入,即键盘输入cout:它是ostream类的对象,用来处理标准输出,即屏幕输出cerr:它是ostream类的对象,用来处理标准出错信息,不带缓冲区的输出,即发给它的内容立即输出clog:它是ostream类的对象,用来处理标准出错信息,带缓冲区的输出,缓冲区满时被输出l 如果在程序中有下面的表达式如果在程序中有下面的表达式:coutC+;表达式相当于表达式相当于:cout.operator”、“”重载为对以下标准类型的插入和提取运算符重载为对以下标准类型的插入和提取运算符:char,signed c
13、har,unsigned char,short,unsigned short,int,unsigned int,long,unsigned long,float,double,long double,char*,signed char*,unsigned char*等。等。所以,所以,“”运行符可以输入、输出各种类型的数据。运行符可以输入、输出各种类型的数据。例例13.1 有一元二次方程有一元二次方程ax2+bx+c=0,其一般解为其一般解为x1,2=(-bb2-4ac)/2a,但若但若a=0,或,或b2-4ac0时,用此公式时,用此公式出错。出错。编程序,从键盘输入编程序,从键盘输入a,b,
14、c的值,求的值,求x1和和x2。如果如果a=0或或b2-4ac0,输出出错信息。输出出错信息。#include#include using namespace std;13.2 标准输出流标准输出流 13.2.1 标准输入、输出流对象的使用标准输入、输出流对象的使用int main()float a,b,c,disc;coutabc;if(a=0)cerra is equal to zero,error!endl;/将有关出错信息插入将有关出错信息插入cerr流,在屏幕输出流,在屏幕输出 elseif(disc=b*b-4*a*c)0)cerrdisc=b*b-4*a*c0endl;/将有关出
15、错信息插入将有关出错信息插入cerr流,流,在屏幕输出在屏幕输出else coutx1=(-b+sqrt(disc)/(2*a)endl;coutx2=(-b-sqrt(disc)/(2*a)endl;return 0;运行情况如下运行情况如下:please input a,b,c:0 2 3 a is equal to zero,error!please input a,b,c:5 2 3 sc=b*b-4*a*c0please input a,b,c:1 2.5 1.5 x1=-1x2=-1.5在输出数据时,有时希望数据按指定的格式输出。有两在输出数据时,有时希望数据按指定的格式输出。有两
16、种方法可以达到此目的。一种是第种方法可以达到此目的。一种是第3章已介绍过的使用章已介绍过的使用控制符的方法;第控制符的方法;第2种是使用流对象的有关成员函数。种是使用流对象的有关成员函数。1.使用控制符控制输出格式使用控制符控制输出格式输出数据的控制符见书中输出数据的控制符见书中P337。应当注意,这些控制符是在头文件应当注意,这些控制符是在头文件iomanip中定义的,中定义的,因而程序中应当包含因而程序中应当包含iomanip。13.2.2 格式输出格式输出例例13.2 用控制符控制输出格式。用控制符控制输出格式。#include#include/不要忘记包含此头文件不要忘记包含此头文件u
17、sing namespace std;int main()int a;couta;coutdec:decaendl;/以十进制形式输出整数以十进制形式输出整数 couthex:hexaendl;/以十六进制形式输出整数以十六进制形式输出整数a coutoct:setbase(8)aendl;/以八进制形式输出整数以八进制形式输出整数a char*pt=China;/pt指向字符串指向字符串China coutsetw(10)ptendl;/指定域宽为指定域宽为10,输出字符串,输出字符串 coutsetfill(*)setw(10)ptendl;/指定域宽指定域宽10,输出字符串,空白,输出字
18、符串,空白 处处以以*填充填充 double pi=22.0/7.0;/计算计算pi值值 coutsetiosflags(ios:scientific)setprecision(8);/按指数形式输出,按指数形式输出,8位小位小数数 coutpi=piendl;/输出输出pi值值 coutpi=setprecision(4)piendl;/改为改为4位小数位小数 coutpi=setiosflags(ios:fixed)piendl;/改为小数形式输出改为小数形式输出 return 0;运行结果如下运行结果如下:input a:34(输入输入a的值的值)dec:34 (十进制形式十进制形式)h
19、ex:22 (十六进制形式十六进制形式)oct:42 (八进制形式八进制形式)China (域宽为域宽为10)*China (域宽为域宽为10,空白处以,空白处以*填充填充)pi=3.14285714e+00(指数形式输出,指数形式输出,8位小数位小数)pi=3.1429e+00 (指数形式输出,指数形式输出,4位小数位小数)pi=3.143 (小数形式输出,精度仍为小数形式输出,精度仍为4)2.用流对象的成员函数控制输出格式用流对象的成员函数控制输出格式除了可以用控制符来控制输出格式外,还可以通过调用流除了可以用控制符来控制输出格式外,还可以通过调用流对象对象cout中用于控制输出格式的成员
20、函数来控制输出格式。中用于控制输出格式的成员函数来控制输出格式。用于控制输出格式的常用的成员函数见书中用于控制输出格式的常用的成员函数见书中P332。流成员函数流成员函数setf和控制符和控制符setiosflags括号中的参数表示格括号中的参数表示格式状态,它是通过格式标志来指定的。格式标志在类式状态,它是通过格式标志来指定的。格式标志在类ios中中被定义为枚举值。因此在引用这些格式标志时要在前面加被定义为枚举值。因此在引用这些格式标志时要在前面加上类名上类名ios和域运算符和域运算符“:”。格式标志见书中。格式标志见书中P333。例例13.3 用流控制成员函数输出数据。用流控制成员函数输出
21、数据。#include using namespace std;int main()int a=21 cout.setf(ios:showbase);/显示基数符号显示基数符号(0 x或或0)coutdec:aendl;/默认以十进制形式输出默认以十进制形式输出a cout.unsetf(ios:dec);/终止十进制的格式设置终止十进制的格式设置 cout.setf(ios:hex);/设置以十六进制输出的状态设置以十六进制输出的状态 couthex:aendl;/以十六进制形式输出以十六进制形式输出acout.unsetf(ios:hex);/终止十六进制的格式设置终止十六进制的格式设置
22、cout.setf(ios:oct);/设置以八进制输出的状态设置以八进制输出的状态 coutoct:aendl;/以八进制形式输出以八进制形式输出acout.unseft(ios:oct);char*pt=China;/pt指向字符串指向字符串China cout.width(10);/指定域宽为指定域宽为10 coutptendl;/输出字符串输出字符串 cout.width(10);/指定域宽为指定域宽为10 cout.fill(*);/指定空白处以指定空白处以*填充填充 coutptendl;/输出字符串输出字符串 double pi=22.0/7.0;/输出输出pi值值cout.se
23、tf(ios:scientific);/指定用科学记数法输出指定用科学记数法输出coutpi=;/输出输出pi=cout.width(14);/指定域宽为指定域宽为14coutpiendl;/输出输出pi值值cout.unsetf(ios:scientific);/终止科学记数法状态终止科学记数法状态cout.setf(ios:fixed);/指定用定点形式输出指定用定点形式输出cout.width(12);/指定域宽为指定域宽为12cout.setf(ios:showpos);/正数输出正数输出“+”号号cout.setf(ios:internal);/数符出现在左侧数符出现在左侧cout.
24、precision(6);/保留保留6位小数位小数coutpiendl;/输出输出pi,注意数符注意数符“+”的位置的位置return 0;运行情况如下运行情况如下:dec:21(十进制形式十进制形式)hex:0 x15 (十六进制形式,以十六进制形式,以0 x开头开头)oct:025 (八进制形式,以八进制形式,以0开头开头)China (域宽为域宽为10)*China (域宽为域宽为10,空白处以,空白处以*填充填充)pi=*3.142857e+0 (指数形式输出,域宽指数形式输出,域宽14,默认,默认6位小数位小数)+*3.142857 (小数形式输出,精度为小数形式输出,精度为6,最左
25、侧输出数符,最左侧输出数符“+”)l 输出单个字符的成员函数输出单个字符的成员函数put。如:如:cout.put(a);调用该函数的结果是在屏幕上显示一个字符调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符put函数的参数可以是字符的ASCII代码put函数的参数也可以是一个整型表达式 如:cout.put(65+32);输出为:a(字符a的ASCII代码)l 可以在一个语句中连续调用可以在一个语句中连续调用put函数。函数。如:如:cout.put(71).put(79).pu(79).put(68).put(n);在屏幕上显示在屏幕上显示GOOD。13.2.3 用流成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第14讲 输入输出流 14 输入输出
限制150内