C程序设计《输入输出流》.ppt
《C程序设计《输入输出流》.ppt》由会员分享,可在线阅读,更多相关《C程序设计《输入输出流》.ppt(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计 输入输出流输入输出流第第9章章输入输出流输入输出流 本章学习要点本章学习要点完成程序的基本功能需要有初始数据的输入完成程序的基本功能需要有初始数据的输入和运行结果的输出和运行结果的输出.本章重点介绍本章重点介绍C+输入输入/输出流库、预定义类输出流库、预定义类型数据的输入和输出、格式控制、自定义类型数据的输入和输出、格式控制、自定义类型数据的输入和输出以及文件的输入和输出型数据的输入和输出以及文件的输入和输出等内容。等内容。v9.1 C+的输入和输出概述的输入和输出概述v9.2 C+的标准输入的标准输入/输出流输出流v9.3 输入运算符和输出运算符及其重输入运算符和输出运算符及其
2、重载载v9.4 C+格式输入和输出格式输入和输出v9.5 文件操作与文件流文件操作与文件流v9.6 学生信息管理系统中的文件操作学生信息管理系统中的文件操作 第第9章输入输出流章输入输出流9.1 C+的输入和输出概述的输入和输出概述1iostream类库中有关的类类库中有关的类C+除保留除保留C语言的输入输出系统之外,还利用继承的机语言的输入输出系统之外,还利用继承的机制创建出一套自己的方便、一致、安全、可扩充的输入制创建出一套自己的方便、一致、安全、可扩充的输入输出系统,这套输入输出系统就是输出系统,这套输入输出系统就是C+的输入的输入/输出输出(I/O)流库。)流库。vC+自有的输入输出通
3、过编译系统对数据类型进行严格自有的输入输出通过编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。而的检查,凡是类型不正确的数据都不可能通过编译。而且且C+的的I/O操作是可扩展的,不仅可以用来输入输出标操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。准类型的数据,也可以用于用户自定义类型的数据。C+对标准类型的数据和对用户自定义类型的数据的输对标准类型的数据和对用户自定义类型的数据的输入入/输出,采用同样的方法处理。输出,采用同样的方法处理。C+通过通过I/O流类库来流类库来实现丰富的实现丰富的I/O功能。功能。vC+的输入输出优于的输
4、入输出优于C语言中的语言中的printf()和和scanf(),但是,但是相对来说比较复杂,要掌握许多细节。相对来说比较复杂,要掌握许多细节。9.2 C+的标准输入的标准输入/输出流输出流vC+的输入输出流是指由若干字节组的输入输出流是指由若干字节组成的字节序列,这些字节中的数据按成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。在顺序从一个对象传送到另一对象。在输入操作时,字节流从输入设备输入操作时,字节流从输入设备(如键如键盘、磁盘盘、磁盘)流向内存,在输出操作时,流向内存,在输出操作时,字节流从内存流向输出设备字节流从内存流向输出设备(如屏幕、如屏幕、打印机、磁盘等打印机、磁
5、盘等)。流中的内容可以是。流中的内容可以是ASCII字符、二进制形式的数据、图形字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信图像、数字音频视频或其他形式的信息。息。vC+的的I/O流库中的类称为流类。用流流库中的类称为流类。用流类定义的对象称为流对象。前面曾提类定义的对象称为流对象。前面曾提到:到:cout和和cin并不是并不是C+语言中提供语言中提供的语句,它们是的语句,它们是I/O流类的对象。在未流类的对象。在未学习类和对象时,在不致引起误解的学习类和对象时,在不致引起误解的前提下,为叙述方便,把它们称为前提下,为叙述方便,把它们称为cout语句和语句和cin语句。在学习了
6、类和对语句。在学习了类和对象后,我们对象后,我们对C+的输入输出应当有的输入输出应当有更深刻的认识。更深刻的认识。v9.2.1 iostream类库中有关的类及其类库中有关的类及其定义的流对象定义的流对象C+编译系统提供了用于输入输出的编译系统提供了用于输入输出的iostream类库。在类库。在iostream类库中包类库中包含许多用于输入输出的类。这些类的含许多用于输入输出的类。这些类的继承层次结构如课本继承层次结构如课本291页图页图9-1所示。所示。为了实现为了实现C+对文件的操作,对文件的操作,C+的的iostream类库中派生定义了用于文件操作的类,它们分别类库中派生定义了用于文件操
7、作的类,它们分别是如下几个类:是如下几个类:vfstreambase类:这是一个公共基类,文件操作类:这是一个公共基类,文件操作中不直接使用这个类。中不直接使用这个类。vifstream类:派生自类:派生自fstreambase类和类和istream类,类,负责对文件进行提取操作。负责对文件进行提取操作。vofstream类:派生自类:派生自fstreambase类和类和ostream类,负责对文件进行插入操作。类,负责对文件进行插入操作。vfstream类:派生自类:派生自fstreambase类和类和iostream类,类,负责对文件进行插入和提取操作。负责对文件进行插入和提取操作。ios
8、tream类库中不同的类的声明被放在不同的头文类库中不同的类的声明被放在不同的头文件中,见课本件中,见课本292页表页表9-1。用户在程序中用。用户在程序中用#include命令包含了有关的头文件就相当于在本命令包含了有关的头文件就相当于在本程序中声明了所需要用到的类。程序中声明了所需要用到的类。我们编程时常用的头文件有:我们编程时常用的头文件有:viostream:包含了对输入输出流进行操作所需的:包含了对输入输出流进行操作所需的基本信息。基本信息。vfstream:用于用户管理的文件的:用于用户管理的文件的I/O操作。操作。vstrstream:用于字符串的:用于字符串的I/O。vstdi
9、ostream:用于混合使用:用于混合使用C和和C+的的I/O机制时。机制时。viomanip:用于格式化:用于格式化I/O时。时。2在在iostream头文件中定义的流对象头文件中定义的流对象在在iostream头文件中定义的类有:头文件中定义的类有:ios,istream,ostream,iostream,istream _withassign,ostream_withassign,iostream_withassign等。等。iostream头文件包含了对输入输出流进行操作所需的基本信头文件包含了对输入输出流进行操作所需的基本信息。因此大多数息。因此大多数C+程序都包括程序都包括iost
10、ream头文件。在头文件。在iostream头文件中不仅定义了有关的类,还定义了头文件中不仅定义了有关的类,还定义了4种流种流对象,供用户使用,它们是:对象,供用户使用,它们是:vcin:是:是istream的派生类的派生类istream_withassign的对象,它的对象,它是从标准输入设备是从标准输入设备(键盘键盘)输入到内存的数据流,称为输入到内存的数据流,称为cin流流或标准输入流。或标准输入流。vcout:是:是ostream的派生类的派生类ostream_withassign的对象,的对象,它是从内存输入到标准输出设备它是从内存输入到标准输出设备(显示器显示器)的数据流,称为的数
11、据流,称为cout流或标准输出流。流或标准输出流。vcerr和和clog:作用相似,均为向输出设备:作用相似,均为向输出设备(显示器显示器)输出出输出出错信息。它们的区别是错信息。它们的区别是cerr提供不带缓冲区的输出,提供不带缓冲区的输出,clog提供带缓冲区的输出。提供带缓冲区的输出。v从键盘输入时用从键盘输入时用cin流,向显示器输出时用流,向显示器输出时用cout流。向显流。向显示器输出出错信息时用示器输出出错信息时用cerr或或clog流。流。9.2.2 C+的标准输出流的标准输出流标准输出流是流向标准输出设备标准输出流是流向标准输出设备(显示器显示器)的数据。的数据。ostrea
12、m类类定义了定义了3个输出流对象,即个输出流对象,即cout,cerr,clog。v1cout,cerr和和clog流流v(1)cout流对象流对象vcout必须和运算符必须和运算符一起使用。用一起使用。用cout进行输出的一般形式进行输出的一般形式为:为:vcout输出项输出项1输出项输出项2.;v它的功能是将输出项它的功能是将输出项1,输出项,输出项2,.插入到输出流插入到输出流cout中,中,然后由然后由C+系统将系统将cout中的内容输出到显示屏幕上。中的内容输出到显示屏幕上。v在在C+的头文件的头文件iostream中,定义了一个代表回车换行的控中,定义了一个代表回车换行的控制符制符
13、endl,其作用与,其作用与“n”相同。如下列三个输出语句是等相同。如下列三个输出语句是等价的:价的:coutC+Programn;vcoutC+Program n;vcoutC+Programendl;而且需要注意的是:而且需要注意的是:v 系统已经对系统已经对“”运算符作了重载函数,因此运算符作了重载函数,因此用用“cout”输出基本类型的数据时,可以不必输出基本类型的数据时,可以不必考虑数据是什么类型。考虑数据是什么类型。v 在在iostream头文件中只对头文件中只对“”运算运算符用于标准类型数据的输入输出进行了重载,但符用于标准类型数据的输入输出进行了重载,但未对用户自定义类型数据的
14、输入输出进行重载。未对用户自定义类型数据的输入输出进行重载。v 在用在用cout进行输出时,每输出一项都要用一个进行输出时,每输出一项都要用一个“”运算符。例如:输出语句:运算符。例如:输出语句:couta=a,b=bendl;不能写成:不能写成:couta=,a,b=,b表达式表达式1表达式表达式2.在上式中,流提取运算符在上式中,流提取运算符“”可以连续写可以连续写多个,每个后面跟一个表达式,表达式通多个,每个后面跟一个表达式,表达式通常是获得输入值的变量或对象。例题见课常是获得输入值的变量或对象。例题见课本本296页页【例例9-3】。v2用成员函数用成员函数get()获取一个字符获取一个
15、字符除了可以用除了可以用cin输入标准类型的数据外,还可以用输入标准类型的数据外,还可以用istream类的成员函数类的成员函数get()从输入流中获取一个从输入流中获取一个字符,并把它放置到变量中。该函数的使用格式字符,并把它放置到变量中。该函数的使用格式有有2种形式:无参数的,有一个参数的。种形式:无参数的,有一个参数的。(1)无参数的)无参数的get()函数函数其调用形式为:其调用形式为:cin.get()其作用是从指定的输入流中提取一个字符,函数的其作用是从指定的输入流中提取一个字符,函数的返回值就是读入的字符。若遇到输入流中的文件返回值就是读入的字符。若遇到输入流中的文件结束符,则函
16、数值返回文件结束标志结束符,则函数值返回文件结束标志EOF(一般情一般情况下认为是况下认为是-1),例题见课本,例题见课本297页页【例例9-4】:v(2)有一个参数的)有一个参数的get()函数函数其调用形式为:其调用形式为:cin.get(char&ch)其作用是从输入流中读取一个字符,赋其作用是从输入流中读取一个字符,赋给字符变量给字符变量ch。如果读取成功则函数。如果读取成功则函数返回非返回非0值值(真真),如失败,如失败(遇文件结束符遇文件结束符)则函数返回则函数返回0值值(假假)。【例例9-4】可以可以改写为课本改写为课本298页的页的【例例9-5】。v使用使用get()函数还可以
17、输入一行字符。函数还可以输入一行字符。其调用形式为:其调用形式为:cin.get(char*buf,int Limit,Deline=n);这里,这里,*buf可以是一个字符数组或一个字符指针。可以是一个字符数组或一个字符指针。Limit是一个是一个int型数,用来限制从输入流中读取到型数,用来限制从输入流中读取到buf字符数组中的字符个数,最多只能读字符数组中的字符个数,最多只能读Limit-1个,因为个,因为要留出最后一个位置存放结束符。要留出最后一个位置存放结束符。Deline是读取字符是读取字符时指定的结束符,其默认值为时指定的结束符,其默认值为“n”,终止字符也可终止字符也可以用其他
18、字符,如以用其他字符,如cin.get(ch,10,x)。该函数的作用是从输入流中读取该函数的作用是从输入流中读取Limit-1个字符,赋个字符,赋给指定的字符数组给指定的字符数组(或字符指针指向的数组或字符指针指向的数组),如果在,如果在读取读取Limit-1个字符之前遇到指定的终止字符,则提前个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非结束读取。如果读取成功则函数返回非0值值(真真),如失,如失败败(遇文件结束符遇文件结束符)则函数返回则函数返回0值值(假假)。再将。再将【例例9-5】改写例题见课本改写例题见课本299页:页:v3用成员函数用成员函数getline
19、()函数读入一函数读入一行字符行字符getline()函数的作用是从输入流中读函数的作用是从输入流中读取一行字符,其用法与上面讲述的利用取一行字符,其用法与上面讲述的利用get()函数输入一行字符的功能类似。即函数输入一行字符的功能类似。即cin.getline(char*buf,int Limit,Deline=n);v4用成员函数用成员函数read()读取一串字符读取一串字符使用成员函数使用成员函数read()可以从输入流中读取可以从输入流中读取指定数目的字符并将它们存放在指定的数组指定数目的字符并将它们存放在指定的数组中。该函数使用格式如下:中。该函数使用格式如下:cin.read(ch
20、ar*buf,int size);其中,其中,buf是用来存放读取来的字符的字是用来存放读取来的字符的字符指针或者是字符数组,符指针或者是字符数组,size是一个是一个int型数,型数,用来指定从输入流中读取字符的个数。课本用来指定从输入流中读取字符的个数。课本300页页【例例9-6】利用利用read()函数读入字符串,函数读入字符串,并输出。并输出。v5istream类的其他成员函数类的其他成员函数除了以上介绍的用于读取数据的成员函数外,除了以上介绍的用于读取数据的成员函数外,istream类还有其他在输入数据时用得着的一些成员类还有其他在输入数据时用得着的一些成员函数。常用的有以下几种:函
21、数。常用的有以下几种:(1)eof()函数函数eof是是end of file的缩写,表示的缩写,表示“文件结束文件结束”。从输入流读取数据,如果到达文件末尾(遇文件结从输入流读取数据,如果到达文件末尾(遇文件结束符),束符),eof函数值为非零值(表示真),否则为函数值为非零值(表示真),否则为0(假)。其调用格式为:(假)。其调用格式为:cin.eof();课本课本301页页【例例9-7】逐个读入一行字符,将其中逐个读入一行字符,将其中的非空格字符输出。的非空格字符输出。v(2)peek()函数函数peek()函数的作用是从输入流中返回函数的作用是从输入流中返回下一个字符,但它只是观测,指
22、针仍停下一个字符,但它只是观测,指针仍停留在当前位置,遇到流结束标志时返回留在当前位置,遇到流结束标志时返回EOF。其调用形式为:。其调用形式为:c=cin.peek();课本课本301页页【例例9-8】编制程序,检测编制程序,检测字符字符1后面是字符后面是字符2的连续字符组的个数。的连续字符组的个数。v(3)putback()函数函数v其调用形式为:其调用形式为:vcin.putback(ch);v其作用是将前面用其作用是将前面用get()或或getline()函函数从输入流中读取的字符数从输入流中读取的字符ch返回到输返回到输入流,插入到当前指针位置,以供后入流,插入到当前指针位置,以供后
23、面读取。面读取。v课本课本302页页【例例9-9】putback()函数函数的用法。的用法。v(4)ignore()函数函数vignore()函数的作用是跳过输入流中函数的作用是跳过输入流中n个字符,或个字符,或在遇到指定的终止字符时提前结束(此时跳过包在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。括终止字符在内的若干字符)。v其调用形式为:其调用形式为:vcin.ignore(int n=1,char&ch=EOF)v其中,其中,n为字符个数,为字符个数,ch为终止字符。也可以不为终止字符。也可以不带参数,带参数,n默认值为默认值为1,终止字符默认为,终止字符默认为E
24、OF,如:,如:vignore(5,A);/跳过输入流中跳过输入流中5个字符,遇个字符,遇A后后就不再跳了就不再跳了v课本课本303页页【例例9-10】用用ignore()函数跳过输入流函数跳过输入流中的字符。中的字符。v以上介绍的各个成员函数,不仅可以以上介绍的各个成员函数,不仅可以用用cin流对象来调用,而且也可以用流对象来调用,而且也可以用istream类的其他流对象来进行调用。类的其他流对象来进行调用。9.3 输入运算符和输出运算符输入运算符和输出运算符及其重载及其重载9.3.1 输入运算符输入运算符输入运算符输入运算符“”也称为流提取运算符,它是一个也称为流提取运算符,它是一个二目运
25、算符,有两个操作数,左操作数是二目运算符,有两个操作数,左操作数是istream类的类的一个对象,右操作数既可以是一个预定义的变量,也一个对象,右操作数既可以是一个预定义的变量,也可以是重载了该运算符的类对象。因此,输入运算符可以是重载了该运算符的类对象。因此,输入运算符不仅能够识别预定义类型的变量,如果某个类中重载不仅能够识别预定义类型的变量,如果某个类中重载了这个运算符,它也能识别这个类的对象。了这个运算符,它也能识别这个类的对象。在使用输入运算符时需要注意以下几点:在使用输入运算符时需要注意以下几点:(1)在默认情况下,运算符)在默认情况下,运算符“”跳过空白符,然跳过空白符,然后读入与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 输入输出流 程序设计 输入输出
限制150内