《第14章输入输出流.ppt》由会员分享,可在线阅读,更多相关《第14章输入输出流.ppt(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1-1融智技术学院融智技术学院第14章 输入/输出流杨章伟杨章伟e-mail:1-2融智技术学院融智技术学院课程内容安排课程内容安排输入输入/输出流的引入输出流的引入 标准输入标准输入/输出流输出流 输入输入/输出流成员函数输出流成员函数 输入输入/输出的格式控制输出的格式控制用户自定义数据类型的输入用户自定义数据类型的输入/输出输出 小结小结 习题习题 1-3融智技术学院融智技术学院输入输入/输出流的引入输出流的引入 经经过过前前面面章章节节的的学学习习,读读者者已已经经知知道道,应应用用程程序序输输入入/输输出出是是使使用用非非常常频频繁繁的的。一一般般而而言言,输输入入是是为为了了实实现
2、现程程序序与与用用户户的的交交互互,而而输输出出是是为为了了返返回回结结果果或或给给出出提提示示信信息息。事事实实上上,C+并并不不具具有有内内部部输输入入/输输出出的的能能力力,即即其其本本身身并并没没有有输输入入/输输出出语语句句,这这样样做做的的目目的的是是为为了了最最大大限限度度地地保保证证语语言言与与平平台台的的无无关关性性。计计算算机机语语言言的的输输入入/输输出出功功能能都都是是与与操操作作系系统统相相关关的的,如如果果C+为为某某种种操操作作系系统统实实现现内内部部输输入入/输输出出功功能能,那那它它也也就就被被限限制制在在这这个操作系统上了,这是不被希望的。个操作系统上了,这
3、是不被希望的。果果一一个个应应用用程程序序没没有有输输入入和和输输出出,那那它它也也就就没没有有应应用用价价值值。在在C+中中,输输入入/输输出出功功能能是是通通过过调调用用该该操操作作系系统统的的I/O库库来来实实现现的。的。1-4融智技术学院融智技术学院printf与与scanf的缺陷的缺陷 有过有过C语言学习经历的读者应该知道,语言学习经历的读者应该知道,C语言中的输入语言中的输入/输出大输出大都是由函数都是由函数scanf和和printf来实现的。来实现的。scanf、printf都是都是C语语言标准输入言标准输入/输出库函数。输出库函数。C语言的标准输入语言的标准输入/输出库函数是输
4、出库函数是安全的、高效的。安全的、高效的。既然使用既然使用C语言语言I/O库函数也能够很好地完成程序的输入库函数也能够很好地完成程序的输入/输出,输出,那为什么还有引入那为什么还有引入C+的输入的输入/输出流呢?这是因为输出流呢?这是因为C语言语言I/O库存在以下的缺陷:库存在以下的缺陷:即使只使用了解释程序的一个功能,也要全部装载。即使只使用了解释程序的一个功能,也要全部装载。虽然虽然printf族函数已经优化得很好,但是,它是在运行期间进族函数已经优化得很好,但是,它是在运行期间进行解释的。行解释的。对于对于C+来说,输出函数来说,输出函数printf不能被扩展是最大的缺点。不能被扩展是最
5、大的缺点。1-5融智技术学院融智技术学院输入输入/输出流类层次输出流类层次 由由于于C+的的流流类类库库是是用用派派生生方方法法建建立立起起来来的的输输入入/输输出出类类库库,因因此此它它必必然然有有基基类类和和派派生生类类。C+中中,它它有有两两个个平平行行的的基基类类streambuf和和ios,其其他他的的流流类类都都是是从从这这两两个个基基类类直直接接或或间间接派生的。使用这些流类库时,必须包含相应的头文件。接派生的。使用这些流类库时,必须包含相应的头文件。1-6融智技术学院融智技术学院标准输入标准输入/输出流输出流 C+将一些常用的流类对象,如键盘输入、显示器输出、程将一些常用的流类
6、对象,如键盘输入、显示器输出、程序运行出错输出、打印机输出等,实现定义并内置在系统中,序运行出错输出、打印机输出等,实现定义并内置在系统中,供用户直接使用。这些系统内置的用于设备间传递数据的对供用户直接使用。这些系统内置的用于设备间传递数据的对象称为标准流类对象,共有象称为标准流类对象,共有4个。个。cin对象:与标准输入设备相关联的标准输入流。对象:与标准输入设备相关联的标准输入流。cout对象:与标准输出设备相关联的标准输出流。对象:与标准输出设备相关联的标准输出流。cerr对象:与标准错误输出设备相关联的非缓冲方式的标准对象:与标准错误输出设备相关联的非缓冲方式的标准输出流。输出流。cl
7、og对象:与标准错误输出设备相关联的缓冲方式的标准对象:与标准错误输出设备相关联的缓冲方式的标准输出流。输出流。1-7融智技术学院融智技术学院输入输入/输出流成员函数输出流成员函数 C+中,输入中,输入/输出流除了可以使用前面介绍的输入输出流除了可以使用前面介绍的输入/输出流对象输出流对象外,类外,类istream还有三个从流中进行非格式化抽取的成员函数:还有三个从流中进行非格式化抽取的成员函数:get()、getline()和和read()。get()函数:输出字符串函数:输出字符串 getline()函数:获取字符串函数:获取字符串 1-8融智技术学院融智技术学院输入输入/输出的格式控制输
8、出的格式控制 读者知道,读者知道,C+仍可使用仍可使用C中的中的printf()和和scanf()进行格进行格式化控制。同时,式化控制。同时,C+又提供了两种格式化控制的方法:又提供了两种格式化控制的方法:一种是使用一种是使用ios类中的有关格式控制的成员函数,另一类中的有关格式控制的成员函数,另一种是使用被称为格式控制符的特殊类型的函数。种是使用被称为格式控制符的特殊类型的函数。用用ios类的成员函数进行格式控制类的成员函数进行格式控制【范例范例14-7】使用成员函数控制输入使用成员函数控制输入/输出格式。该范输出格式。该范例输出了许多字符和字符串,其中使用到了多种例输出了许多字符和字符串,
9、其中使用到了多种cout对对象的成员函数来控制格式象的成员函数来控制格式 1-9融智技术学院融智技术学院使用格式控制符进行格式控制使用格式控制符进行格式控制 14.4.1节使用成员函数控制输入节使用成员函数控制输入/输出格式时,每个函数的输出格式时,每个函数的调用都要写一条语句,它们还不能直接嵌入到输入调用都要写一条语句,它们还不能直接嵌入到输入/输出语输出语句中,这使得使用很不方便。为此,句中,这使得使用很不方便。为此,C+由提供了另外一由提供了另外一种输入种输入/输出格式的控制方法,即使用称为格式控制符的特输出格式的控制方法,即使用称为格式控制符的特殊函数。殊函数。【范例范例14-8】使用
10、预定义的格式控制符控制输入使用预定义的格式控制符控制输入/输出格式。输出格式。该范例使用预定义的控制符进行输入该范例使用预定义的控制符进行输入/输出格式控制输出格式控制 1-10融智技术学院融智技术学院用户自定义数据类型的输入用户自定义数据类型的输入/输出输出 用户自定义数据类型的输入用户自定义数据类型的输入/输出,是通过重载运算符输出,是通过重载运算符“”实现的实现的。重载输出运算符重载输出运算符“”:重载输出运算符重载输出运算符“”:重载输入运算符重载输入运算符“”也称为提取也称为提取运算符,用户用以自定义类型的输入。运算符,用户用以自定义类型的输入。1-11融智技术学院融智技术学院本章主
11、要介绍了本章主要介绍了C+的输入的输入/输出流的相关内容。首先由输出流的相关内容。首先由C语语言中的输入言中的输入/输出函数输出函数scanf()和和printf()的缺陷引出的缺陷引出C+中中的输入的输入/输出流,接着详细讲解了输出流,接着详细讲解了C+的标准输入的标准输入/输出流,输出流,并就并就C+的输出格式控制符做了详细介绍。读者学习完本的输出格式控制符做了详细介绍。读者学习完本章后,必须能在实际程序中使用不同的输入章后,必须能在实际程序中使用不同的输入/输出流进行输出流进行I/O操作。此外,本章就输入操作。此外,本章就输入/输出运算符输出运算符“”和和“”进行了重载,使其能够进行类之
12、间的输入进行了重载,使其能够进行类之间的输入/输出,这也是输出,这也是本章的重点和难点之一。本章的重点和难点之一。小结小结 1-12融智技术学院融智技术学院1编写一个程序,统计从键盘上输入每一行字符的个数,编写一个程序,统计从键盘上输入每一行字符的个数,从中选出最长的行的字符个数,统计共输入多少行。从中选出最长的行的字符个数,统计共输入多少行。【解答解答】该试题主要考查输入流对象的成员函数的使用。该试题主要考查输入流对象的成员函数的使用。该试题的实现可以在接收用户输入的同时就通过对象该试题的实现可以在接收用户输入的同时就通过对象cin的成员函数的成员函数gcount进行字符个数的统计,同时通过
13、一个进行字符个数的统计,同时通过一个循环语句接收用户的输入,使用循环语句接收用户的输入,使用cin的成员函数的成员函数getline()判断用户的输入是否完成。判断用户的输入是否完成。2有一元二次方程有一元二次方程ax2+bx+c=0,其一般解为其一般解为 x、1、2=但若但若a=0,或,或b2-4ac0时,用此公式出错。编写一时,用此公式出错。编写一个个C+程序,从键盘输入程序,从键盘输入a,b,c的值,求的值,求x1和和x2。如果。如果a=0或或b2-4ac0,输出出错信息。,输出出错信息。习题习题1-13融智技术学院融智技术学院习题习题3设计一个程序,根据用户输入的学生类基本信息,将输设计一个程序,根据用户输入的学生类基本信息,将输入存储到学生类中后,输出该学生类的所有基本信息,如入存储到学生类中后,输出该学生类的所有基本信息,如图图14-15所示。所示。