《第17章输入输出流.ppt》由会员分享,可在线阅读,更多相关《第17章输入输出流.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十七章 输入/输出流杨章伟杨章伟e-mail:1-2课程内容安排课程内容安排C+中引入标准输入中引入标准输入/输出流的原因。输出流的原因。常用标准输入常用标准输入/输出流对象。输出流对象。输入输入/输出流成员函数的使用和格式控制。输出流成员函数的使用和格式控制。1-3输入输入/输出流简介输出流简介 C+完完全全支支持持C的的输输入入/输输出出系系统统,但但由由于于C的的输输入入/输输出出系系统统不不支支持持类类和和对对象象,所所以以C+又又提提供供了了自自己己的的输输入入/输输出出系系统统,并并通通过过重重载载运运算算符符“”来来支支持持类类和和对对象象的的输输入入/输输出出。C+的的输输入
2、入/输输出出系系统统是是以以字字节节流流的的形式实现的。形式实现的。C+没没有有使使用用C的的输输入入/输输出出函函数数库库,而而是是使使用用iostream类类库库。iostream是是通通过过类类的的继继承承,以以及及类类的的成成员员函函数数的的重重载载来来实实现现的的,从从而而使使iostream类类库库使使用用统统一一的的函函数数接接口口操操作作标标准准I/O、文文件件、存存储储块块等等输输入入/输输出出设设备备。同同时时,iostream类类库库具具有有很很好好的的扩扩展展性性,用用户户可可通通过过重重载载对对其其进行扩展。进行扩展。1-4标准输入标准输入/输出流输出流 C+将一些常
3、用的流类对象,如键盘输入、显示器输出、将一些常用的流类对象,如键盘输入、显示器输出、程序运行出错输出、打印机输出等,定义并内置在系统程序运行出错输出、打印机输出等,定义并内置在系统中,供用户直接使用。这些系统内置的用于设备间传递中,供用户直接使用。这些系统内置的用于设备间传递数据的对象称为标准流类对象,共有数据的对象称为标准流类对象,共有4个。个。cin对象:与标准输入设备相关联的标准输入流。对象:与标准输入设备相关联的标准输入流。cout对象:与标准输出设备相关联的标准输出流。对象:与标准输出设备相关联的标准输出流。cerr对象:与标准错误输出设备相关联的非缓冲方式的对象:与标准错误输出设备
4、相关联的非缓冲方式的标准输出流。标准输出流。clog对象:与标准错误输出设备相关联的缓冲方式的标对象:与标准错误输出设备相关联的缓冲方式的标准输出流。准输出流。1-5输入输入/输出流成员函数输出流成员函数 C+中中,输输入入/输输出出流流除除了了可可以以使使用用前前面面介介绍绍的的输输入入/输输出出流流对对象象外外,类类istream还还有有三三个个从从流流中中进进行行非非格格式式化化抽抽取取的的成成员员函函数数:get()、getline()、put()、read()和和write()函函数数及及其其他成员函数。他成员函数。1-6输入输入/输出格式控制输出格式控制 C+仍仍可可使使用用C中中
5、的的printf()和和scanf()进进行行格格式式化化控控制制。同同时时,C+又又提提供供了了两两种种格格式式化化控控制制的的方方法法:一一种种是是使使用用ios类类中中的的有有关关格格式式控控制制的的成成员员函函数数,另另一一种种是是使使用用被称为格式控制符的特殊类型的函数。被称为格式控制符的特殊类型的函数。一一般般来来说说,ios类类的的成成员员函函数数进进行行格格式式控控制制主主要要是是通通过过对对格格式式状状态态字字、域域宽宽、填填充充字字符符和和输输出出精精度度操操作作来来完完成成的。的。使使用用ios类类的的成成员员函函数数控控制制输输入入/输输出出格格式式时时,每每个个函函数
6、数的的调调用用都都要要写写一一条条语语句句,它它们们还还不不能能直直接接嵌嵌入入到到输输入入/输输出出语语句句中中,这这使使得得使使用用很很不不方方便便。为为此此,C+由由提提供供了了另另外外一一种种输输入入/输输出出格格式式的的控控制制方方法法,即即使使用用一一种种称称为格式控制符的特殊函数。为格式控制符的特殊函数。1-7重载输出运算符重载输出运算符“”重载输出运算符重载输出运算符“”也称为插入运算符,用于用户自也称为插入运算符,用于用户自定义类型数据的输出。重载运算符定义类型数据的输出。重载运算符“”的一般形式为:的一般形式为:ostream&operator”也称为提取运算符,用于用户自
7、定义也称为提取运算符,用于用户自定义类型数据的输入。定义运算符类型数据的输入。定义运算符“”重载函数的一般形式为:重载函数的一般形式为:istream&operator(istream&stream,类名类名 对象名对象名)/操作代码操作代码return stream;其中,第一个参数其中,第一个参数stream是对是对istream对象的引用,必须是对象的引用,必须是输入流,它可以是其他合法的标识符,但必须与输入流,它可以是其他合法的标识符,但必须与return后面后面的标识符相同。第二个参数是一个引用,前面的的标识符相同。第二个参数是一个引用,前面的“&”不能省不能省略。略。重载输入运算符
8、重载输入运算符“”1-9命名空间命名空间 命名空间是命名空间是C+新增加的一种功能,在新增加的一种功能,在C语言中没有命名空语言中没有命名空间的概念。命名空间的主要作用是为了防止标识符名称冲间的概念。命名空间的主要作用是为了防止标识符名称冲突,将逻辑上相关的的标识符置于同一命名空间中。在突,将逻辑上相关的的标识符置于同一命名空间中。在C+中,不仅各种库函数和类使用命名空间来界定,用户中,不仅各种库函数和类使用命名空间来界定,用户也可以定义自己的命名空间。也可以定义自己的命名空间。命名空间是为解决命名空间是为解决C+中标识符的命名冲突而服务的。解决中标识符的命名冲突而服务的。解决的办法就是将将逻
9、辑上相关的标识符置于同一命名空间中。的办法就是将将逻辑上相关的标识符置于同一命名空间中。1-10定义命名空间定义命名空间 C+中,有两种形式的命名空间:有名命名空间和无名(匿中,有两种形式的命名空间:有名命名空间和无名(匿名)命名空间。这两种命名空间的定义格式分别如下。名)命名空间。这两种命名空间的定义格式分别如下。有名命名空间:有名命名空间:namespace 命名空间名命名空间名 声明和定义序列声明和定义序列无名(匿名)命名空间:无名(匿名)命名空间:namespace声明和定义序列声明和定义序列1-11使用命名空间使用命名空间 由于命名空间的定义中包含了许多成员的定义,那么在实际由于命名
10、空间的定义中包含了许多成员的定义,那么在实际的程序设计中,如何来使用命名空间中的这些定义呢?标的程序设计中,如何来使用命名空间中的这些定义呢?标准准C+给出了三种引用命名空间内成员的方法,分别是使给出了三种引用命名空间内成员的方法,分别是使用作用域运算符、用作用域运算符、using指令和指令和using声明声明.1-12小结小结 本章主要介绍了本章主要介绍了C+的输入的输入/输出流的相关内容。首先由输出流的相关内容。首先由C语言中的语言中的输入输入/输出函数输出函数scanf()和和printf()的缺陷引出的缺陷引出C+中的输入中的输入/输出输出流,接着详细讲解了流,接着详细讲解了C+的标准
11、输入的标准输入/输出流的相关概和使用,输出流的相关概和使用,以及以及C+的输入的输入/输出格式控制。此外,本章就输入输出格式控制。此外,本章就输入/输出运算符输出运算符“”和和“”进行了重载,使其能够进行类对象的输入进行了重载,使其能够进行类对象的输入/输出。输出。本章最后对命名空间的相关概念和使用进行了讲述。本章最后对命名空间的相关概念和使用进行了讲述。1-13习题习题【题目【题目248】分析下列程序的输出结果。分析下列程序的输出结果。#include#include#include const int N=80;int main()char bufN;ostrstream out1(buf
12、,sizeof(buf);int a=50;for(int I=0;I6;I+,a+=10)out1”a=”a”,”;out1 0 cout”Buf:”bufendl;double PI=3.1415926;out1.setf(ios:fixed|ios:showpoint);out1.seekp(0);out1”the value of ip=”PI 0 coutbufendl;char*pstr=out1.str();coutpstrendl;1-14【分析分析】该试题主要考查输出流的实现。上述程序段定义了该试题主要考查输出流的实现。上述程序段定义了输出流对象输出流对象out1,并通过循环
13、语句将变量,并通过循环语句将变量a中的值输出,中的值输出,同时调用输出流的格式控制函数同时调用输出流的格式控制函数setf和和seekp函数对输出函数对输出格式进行控制,并输出一个浮点型变量的值。根据循环语格式进行控制,并输出一个浮点型变量的值。根据循环语句和输出格式,其输出结果如下:句和输出格式,其输出结果如下:Buf:a=50;a=60;a=70;a=80;a=90;a=100;The value of pi is 3.14159265 The value of pi is 3.141592651-15【题目目249】cin是(是()的一个对象,处理标准输入。)的一个对象,处理标准输入。c
14、out、cerr和和clog是(是()的对象,)的对象,cout处理标准输出,处理标准输出,cerr和和clog都处理都处理标准出错信息,只是(标准出错信息,只是()输出不带缓冲,()输出不带缓冲,()输出带缓冲。)输出带缓冲。AistreamBostreamCcerrDclog【分析分析】该试题主要考查输入输出流的一些对象。根据前面学习的该试题主要考查输入输出流的一些对象。根据前面学习的内容,读者知道输入流内容,读者知道输入流cin是是istream类流的对象,而类流的对象,而cout、cerr和和clog等等3个都是个都是ostream类的对象。其中,类的对象。其中,cout处理标准输出,
15、处理标准输出,cerr和和clog都处理标准出错信息,其区别在于前者是非缓冲输出,都处理标准出错信息,其区别在于前者是非缓冲输出,后者为带缓冲输出。因此,根据如上原则,该试题的正确选项应后者为带缓冲输出。因此,根据如上原则,该试题的正确选项应为为ABCD。1-16【题目目250】分析下列程序的输出结果:分析下列程序的输出结果:#include using namespace std;int main()char buf=”12345”int I,j;istrstream s1(buf);s1I;istrstream s2(buf,3);s2j;coutI+jendl;1-17【分分析析】该该试
16、试题题主主要要考考查查输输入入流流类类的的问问题题。上上述述程程序序中中定定义义了了字字符符数数组组并并为为其其赋赋初初值值12345,同同时时创创建建了了输输入入流流对对象象s1,通通过过该该对对象象来来对对字字符符数数组组进进行行操操作作,最最后后将将变变量量I和和j中中的的值值进进行行相相加加。根根据据前前面面学学习习的的内内容容,读读者者可可以以分分析析出出,该程序的输出结果为该程序的输出结果为12468。【题目目251】编写一个程序,统计从键盘上输入每一行字符编写一个程序,统计从键盘上输入每一行字符的个数,从中选出最长的行的字符个数,统计共输入多少的个数,从中选出最长的行的字符个数,
17、统计共输入多少行。行。【分析分析】该试题主要考查输入流对象的成员函数的使用。该该试题主要考查输入流对象的成员函数的使用。该试题的实现可以在接收用户输入的同时就通过对象试题的实现可以在接收用户输入的同时就通过对象cin的的成员函数成员函数gcount进行字符个数的统计,同时通过一个循进行字符个数的统计,同时通过一个循环语句接收用户的输入,使用环语句接收用户的输入,使用cin的成员函数的成员函数getline()判判断用户的输入是否完成。断用户的输入是否完成。1-18【题目目252】有一元二次方程有一元二次方程ax2+bx+c=0,其一般解为其一般解为 x、1、2=但若但若a=0,或,或b2-4a
18、c0时,用此公式出错。时,用此公式出错。编写一个编写一个C+程序,从键盘输入程序,从键盘输入a,b,c的值,求的值,求x1和和x2。如果。如果a=0或或b2-4ac0,输出出错信息。,输出出错信息。【分析分析】该试题主要考查该试题主要考查cerr和和clog等标准输出流对象的使等标准输出流对象的使用。该试题要求在用。该试题要求在a=0或或b2-4ac0时不能使用求根公式,时不能使用求根公式,并输出错误信息,此处即可使用并输出错误信息,此处即可使用cerr输出流来实现。判断输出流来实现。判断是否出错可通过分支结构的是否出错可通过分支结构的if语句来实现。语句来实现。【题目目253】编写一个写一个
19、C+程序,从程序,从键盘输入一行字符,逐入一行字符,逐个个读入字符,将入字符,将读入字符入字符赋给字符字符变量量c,然后,然后输出出该字字符。符。1-19【题目目254】编写一个程序,将已有一个字符串编写一个程序,将已有一个字符串BASIC,要求把它们按相反的顺序输出。要求把它们按相反的顺序输出。【分析分析】该试题主要考查输出流该试题主要考查输出流cout的成员函数问题。该试的成员函数问题。该试题可首先定义一个字符串并将其初始化为题可首先定义一个字符串并将其初始化为BASIC,再通,再通过循环语句,从字符串的最后一个字符开始通过标准输出过循环语句,从字符串的最后一个字符开始通过标准输出流流co
20、ut的的put()函数进行输出,直到输出字符串的第一个函数进行输出,直到输出字符串的第一个字符为止。字符为止。【核心代码核心代码】#include using namespace std;int main()char*a=BASIC;/字符指引指向字符指引指向B for(int i=4;i=0;i-)cout.put(*(a+i);/从最后一个字符开始输出从最后一个字符开始输出 cout.put(n);return 0;1-20【题目目255】编写一个程序,建立写一个程序,建立类triangle,用来存,用来存储直直角三角形的角三角形的宽与高,在与高,在该类中重中重载输出运算符函数出运算符函数
21、“”在屏幕上在屏幕上显示三角形。示三角形。【题目目256】从从输入流中分析出数字串。例如:入流中分析出数字串。例如:设输入串入串为A012BCD378 274DEF55GZ则输出出为:Digit string 1 is:012Digit string 2 is:378Digit string 3 is:274Digit stirng 4 is:551-21【题题目目257】程序中有程序中有说说明明语语句:句:int a1;char a2;double a3;根据下面的根据下面的输输出要求写出相出要求写出相应应的的cout语语句。句。(1)输输出出a1、a2、a3的的值值,每两个,每两个值值之之
22、间间用用5个空格个空格间间隔。;隔。;(2)以固定)以固定长长度度10按左按左对齐对齐方式方式输输出出变变量量a1的的值值。(3)以固定)以固定长长度度10按左按左对齐对齐方式方式输输出出变变量量a1的的值值,如果,如果a1值为值为正,要求正,要求输输出前面的正号。出前面的正号。(4)以固定)以固定长长度度15按右按右对齐对齐方式方式输输出出变变量量a3的的值值,用填充,用填充字符字符*填充不足部分(用浮点数的定点数表示法表示)。填充不足部分(用浮点数的定点数表示法表示)。(5)以固定)以固定长长度度15、小数点后保留、小数点后保留3位、按左位、按左对齐对齐方式方式输输出出变变量量a3的的值值
23、。1-22【题题目目258】定定义义一个一个Dog类类,包含体重和年,包含体重和年龄龄两个数据成两个数据成员员及相及相应应的成的成员员函数。声明一个函数。声明一个对对象象dog1,体重,体重为为5,年,年龄为龄为10,使用,使用输输入入输输出流流把出流流把dog1的状的状态态写入磁写入磁盘盘文件;文件;再声明另一个再声明另一个对对象象dog2,通,通过读过读文件把文件把dog1的状的状态赋给态赋给dog2。【分析分析】该试题该试题主要考主要考查查文件的操作。文件的操作。该该程序首先程序首先须须定定义类义类Dog,在主程序中,在主程序中创创建建对对象象dog1,并通,并通过过write函数写入函数写入到磁到磁盘盘文件中,再文件中,再创创建建对对象象dog2,打开文件后使用,打开文件后使用read函数从指定文件中函数从指定文件中读读取信息并取信息并赋给对赋给对象象dog2。