c教程之输入输出流类库.ppt
《c教程之输入输出流类库.ppt》由会员分享,可在线阅读,更多相关《c教程之输入输出流类库.ppt(76页珍藏版)》请在三一办公上搜索。
1、第11章,输入输出流类库,本章导读,在C+语言中并没有输入/输出语句其目的是为了最大限度地保证语言与平台的无关性。为了实现输入/输出操作,C+提供了两种方法:一是通过C+提供的与C语言兼容的输入/输出库函数;二是提供了功能强大的输入/输出流类库,在C+中应提倡使用输入/输出流类库来实现。数据从一个对象到另一个对象的传送被抽象为“流”。C+中,外部向内存提供数据的过程称输入流,数据提供者可以是输入设备,也可以是提供数据的文件。同样从内存向外发送数据的过程称输出流,数据接收者可以是输出设备,也可以是保存所接收数据的文件。,本章提要:,1.流概述2.C+的基本流类体系3.标准输入/输出4.文件输入/
2、输出 5.文本文件的使用6.二进制文件的使用,11.2 流概述,流是一个抽象的概念,数据从一个设备(或存储位置)到另一个对象(或存储位置)的传送通道抽象为“流”。1.流和标准流 流是通过称作流类所定义的对象,而流类是用于完成输入/输出操作的类,该类由C+标准库函数iostream.h提供,如cin、cout等。,计算机硬件的五大部件中,输入/输出设备种类繁多,但键盘和显示器是最常用的输入/输出设备,C+中,把键盘和显示器定义为标准设备。在C+中,针对标准设备实现的输入/输出操作,称标准流。标准流有四个:cin、cout、cerr和clog。其中cin是标准输入流,实现从键盘输入数据;其他三个是
3、标准输出流,实现从显示器输出数据(cerr和clog为标准错误信息输出流)。,2.流和缓冲 在实现输入/输出时,计算机系统专门为输入/输出设备开辟一个临时存放信息的区域称缓冲区。引入缓冲的主要目的是为了提高系统的处理效率。在四个标准流中,除cerr为非缓冲流外,其他三个均为缓冲流。对于非缓冲流,一旦数据送入流中,立即进行处理。而对于缓冲流,只有当缓冲区满时,或当前送入换行字符时,系统才对流中的数据进行处理。通常情况下使用缓冲流,对于某些特殊场合,才使用非缓冲流。如果需要立即处理缓冲区中的信息,应强制刷新输出流,此时可在cout的输出项中使用刷新流flush。,3.流和文件 文件是由文件名作为标
4、识的一组有序数据的集合,文件通常存放在磁盘上,所以一般又称磁盘文件。C+提供了两种类型的流:文本流(Text Stream)和二进制流(Binary Stream)。对应的数据文件也分为两种:文本文件和二进制文件。(1)文本文件:由字符的ASCII码组成,以字符为单位存取。文本文件也称为ASCII码文件。(2)二进制文件:由二进制数据组成,以字节为单位存取。二进制文件在传送时均采用二进制流。二进制流与设备上的输入输出一一对应,在数据传送时不需作任何变换。,11.3 C+的基本流类体系,C+的输入/输出流类库包含在iostream.h头文件中。程序中需要完成基本输入/输出操作时,应包含iostr
5、eam.h头文件,其流类体系见图。,1基类ios 类ios是所有基本流类的基类,其它基本流类均由该类派生而来。2输入流类istream 输入流类派生出istream_withassign类,输入流cin就是由其定义的对象。3输出流类ostream 输出流类派生出ostream_withassign类,输出流cout就是由其定义的对象。4输入输出流类iostream iostream流类是类istream和ostream共同派生的。,11.4 标准输入/输出流,基本流类库定义了四个标准流:cin、cout、cerr、clog,以实现数据流的输入与输出操作。11.4.1 标准输入流cincin类i
6、stream_withassign定义的对象。cin所对应的是标准输入设备键盘。cin为缓冲流。,例【11.1】使用流cin实现数据的输入。#include void main(void)int a;couti;cout”i=”iendl;,11.4.2 标准输出流,标准输出流是cout、cerr、clogostream_withassign定义的对象,在缺省的情况下,cout、cerr、clog 所联系的设备文件为显示器,即将数据流输出到显示器上。标准输出流cout、cerr、clog通过重载“”运算符执行数据的输出操作,执行输出操作看作向流中插入一个字符序列,因此将“”称为插入运算符。在三
7、个标准输出流中,cout、clog为缓冲流,而cerr为非缓冲流。,例【11.2】使用流cerr和clog实现数据的输出。#include void main(void)int r;cerrr;clog”r=”3.14159*r*rendl;,11.4.3 流的格式控制,在实际进行输入/输出时,通常要求按照一定的格式输入或输出数据。如要求按照一定的宽度、上下行之间数据对齐等方式输出数据,以使输出信息更直观明了。为此,C+标准输入/输出流提供了许多格式控制操作符和格式控制的成员函数。1.常用的预定义格式控制(见表11-1),2.输入流格式控制 输入流可以实现多种数据类型的输入,如字符型、数值的整
8、型、单精度型或双精度型等。当输入流实现不同类型数据的输入时,是通过重载“”运算符来实现的。在C+中,允许用户根据需要自定义istream的对象,以实现通过其他设备输入数据。当程序中包含头文件iostream.h,系统将自动产生输入流cin。【例11.3】通过输入流cin 分别输入十进制、八进制、十六进制数。,#include void main()int a,b,c;coutdeca;coutoctb;couthexc;couta=aendl;coutb=bendl;coutc=cendl;,3.输出流格式控制,输出流cout与插入运算符“”输出数据时,可对输出数据的格式进行控制,包括输出宽度
9、、输出位置(实现对齐)、精度、填充方式、进制格式等。(1)不同进制数输出 C+中也有两种设置方式实现不同进制数的输出:使用 setiosflags函数和使用C+预定义的格式控制符dec、oct、hex。【例11.4】用setiosflags函数与格式控制符dec、oct、hex,分别实现十进制、八进制和十六进制数的输出。,#include#include void main()int i=100;coutdecitocti;coutthexiendl;coutdec;coutsetiosflags(ios:dec)it;coutsetiosflags(ios:oct)it;coutreseti
10、osflags(ios:oct);coutsetiosflags(ios:hex)it;coutresetiosflags(ios:hex)iendl;,预定义格式控制函数setiosflags的一般格式为:setiosflags()其中:所表示的主要枚举量值如下:ios:dec 指定输入/输出格式为十进制数(默认)ios:oct 指定输入/输出格式为八进制数ios:hex 指定输入/输出格式为十六进制数ios:skipws 在输入中跳过空白ios:left 左对齐,右边用指定填充字符填充ios:right 右对齐,左边用指定填充字符填充(默认方式)ios:internal 在符号或数制字符后
11、进行填充ios:showpoint 对浮点数显示小数点及尾部的0ios:showpos 正数时显示正号符号(+)ios:scientific用科学记数法输出浮点数ios:fixed 用小数点固定格式输出浮点数,(2)设置输出宽度及填充字符 设置输出宽度有两种方法:通过由ios类中定义的输出格式控制成员函数width(int n)和预定义格式控制函数setw(int n)实现。这两个函数的int类型参数n是表示需输出数据的宽度。设置输出宽度时,还可以结合填充成员函数fill(char c)填充字符,其中字符c是需要填充的字符。width成员函数与fill成员函数均在头文件iostream.h中说
12、明。而预定义格式控制函数setw在头文件iomanip.h中说明。,【例11.5】分别使用width成员函数和预定义格式控制函数setw控制输出宽度,同时通过函数fill填充字符。#include#include void main()float pi=3.14125;cout.width(10);coutpiendl;cout.width(10);cout.fill(#);coutpiendl;cout.fill();coutsetw(10)piendl;coutsetw(10);cout.fill(*);coutpiendl;,(3)控制数值输出精度 浮点数输出时,其默认输出的精度为6位。
13、当需要改变输出精度时,可通过预定义格式控制函数setprecision(int n)来设置,其中整型类型n,使用setiosflags(ios:fixed)设置定点输出方式时,是小数点后的有效位数。使用setiosflags(ios:scientific)设置科学记数输出方式时,是整个数值的位数(总长度)。,【例11.6】通过格式控制输出数值的有效位数。#include#include void main()double pi=314.12596;coutpiendl;/A coutsetiosflags(ios:fixed)setprecision(6);coutpiendlresetios
14、flags(ios:fixed);/Bcoutsetiosflags(ios:scientific)setprecision(10);coutpiendlresetiosflags(ios:scientific);/C,(4)缓冲区与刷新流 通过缓冲流实现输出时,只有当缓冲区满时,才对输出流中的数据进行处理。如果需要立即处理缓冲区中的信息,可通过强制刷新输出流,实现即时输出。在cout的输出项中可使用刷新流flush。,例【11.7】使用缓冲流cout和非缓冲流cerr实现输出情况的比较。#includevoid main()int a=10;cerr通过 cerr输出!n;/Acout通过
15、cout输出!n;/Bcouta/0endl;/C,11.4.4 输入/输出的其他成员函数,1.输入操作的成员函数(1)单个字符输入的成员函数输入单个字符的成员函数有两种格式:int istream:get();istream,例【11.8】分别使用两种格式输入字符。#includevoid main()char c1,c2;c1=cin.get();cin.get(c2);coutc1tc2endl;,(2)字符串输入的成员函数字符串输入的成员函数也有两种格式:istream,例【11.9】分别使用两种格式输入字符串。#includevoid main()char c1100,c2100;c
16、in.get(c1,100);/Acin.getline(c2,100,u);/Bcoutc1c2endl;,(3)peek()和putback()peek():查看当前要提取的字符。putback():向流中插入一个字符。,#includevoid main()char ch;cin.get(ch);while(ch!=.)if(ch=a)cin.putback(b);coutch;while(cin.peek()=m)cin.get();cin.get(ch);coutendl;,2.数据输出成员函数put()、write()、flush()put()用于发送一个字符,可连续使用。ostr
17、eam flush()用于刷新输出流。,例【11.11】使用put()函数实现字符输出。#includevoid main()char a20=I am a student.;cout.put(a0).put(a1).put(a2).put(a3).put(n);cout.write(a,10);cout.put(n);,11.4.5 提取和插入运算符重载,在C+中允许用户重载运算符“”,以实现对象的直接输入/输出。但必须通过友元函数实现“”运算符重载,不可以通过成员函数实现。其原因是这两个运算符的左操作数不可能是该类的对象,而是流类的对象cin、cout等。(1)重载提取运算符“”的一般格式
18、为:friend istream,重载提取运算符“”时,函数返回值必须是类istream的引用。非引用时,cin后面只能有一个提取运算符,如果要满足cin中可以连续使用“”运算符,则必须是引用。格式中,运算符重载函数的第一个参数也必须是类istream的引用,作为运算符的左操作数,第二个参数为自定义类的对象引用,作为运算符的右操作数。须注意,在重载提取运算符“”时,第二个参数必须是引用,否则在运算符重载函数中对对象的输入,无法返回到对应的实参对象。,(2)重载插入运算符“”类同,重载插入运算符“”时,函数返回值必须是类ostream的引用,这也是为了在cout中可以连续使用“”运算符。函数的第
19、一个参数是类ostream的引用,第二个参数为自定义类的对象或对象引用。,【例11.12】重载提取和插入运算符,实现时间类的输入和输出。#includeclass Time int Hour,Minute,Second;public:Time(int h=0.0,int m=0.0,int s=0)Hour=h;Minute=m;Second=s;friend ostream,ostream/B,11.5.1 文件概述 文件是由文件名标识的一组有序数据的集合,文件通常存放在磁盘上。在C+中,磁盘文件只是文件的一种,具体的外部设备,也可以抽象为文件,系统为每个外部设备都指定唯一的一个设备名(文件
20、名)。这样对外部设备的操作也抽象为对文件的操作,对程序设计而言,只要掌握文件的操作,就可以实现对不同具体设备的操作,实现了语言与设备的无关。,11.5 文件流,在C+中,文件分为两种:文本文件和二进制文件。(1)文本文件:由字符的ASCII码组成,以字符为单位存取。文本文件也称为ASCII码文件。(2)二进制文件:由二进制数据组成,以字节为单位存取。使用文件时,必须先打开文件,然后才能对文件进行读或写操作,操作完成后应关闭文件。,在C+头文件fstream.h中,定义了文件流类体系,文件流类体系如图。由图可知C+的文件流类体系是从C+的基本流类体系中派生出来的。当程序中使用文件时,需要包含头文



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教程 输入输出 流类库

链接地址:https://www.31ppt.com/p-4593853.html