中国铁道出版社C10输入输出流

上传人:cn****1 文档编号:571504812 上传时间:2024-08-11 格式:PPT 页数:40 大小:343.02KB
返回 下载 相关 举报
中国铁道出版社C10输入输出流_第1页
第1页 / 共40页
中国铁道出版社C10输入输出流_第2页
第2页 / 共40页
中国铁道出版社C10输入输出流_第3页
第3页 / 共40页
中国铁道出版社C10输入输出流_第4页
第4页 / 共40页
中国铁道出版社C10输入输出流_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《中国铁道出版社C10输入输出流》由会员分享,可在线阅读,更多相关《中国铁道出版社C10输入输出流(40页珍藏版)》请在金锄头文库上搜索。

1、C+C+程序设计程序设计程序设计程序设计-第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流第10章 输入输出流 10-1第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流课程要求1深入理解C+的输入输出流的含义与其实现方法。2掌握标准输入输出流的应用,包括格式输入输出。3掌握文本文件和二进制文件的读写方法。4掌握文件的随机存取方法。5掌握字符串流的应用。2第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流主要内容10.1 C+的输入输出10.2 标准输入输出流10.3 文件操作与文件流10.4 字符串流3第十章第十章第十章第十章 输入输出流输入

2、输出流输入输出流输入输出流10.1 C+的输入输出 C+的输入输出是以流(字节序列)的形式进行的 。C+的输入输出主要有以下三种:(1)对系统指定的标准设备的输入输出,即标准I/O。(2)以外存磁盘文件为对象进行的输入输出,称为文件的输入输出。(3)对内存指定的空间进行输入输出。 4第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.1.1 C+流的概念 1流与流类 C+的输入输出流是由若干字节组成的字节序列,这些字节中的数据按一定的顺序从一个对象传送到另一个对象。 C+提供了一些供程序设计者使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。流是

3、用流类定义的对象,如cin、cout 2流的分类 (1)文本流和二进制流 :按照数据的格式 (2)缓冲流与非缓冲流:按是否使用缓冲区5第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.1.2 C+流类库 C+的流类库是用继承方法建立起来的输入输出类库,由支持标准输入输出操作的基类和支持特定种类的源和目标的输入输出操作的类组成。它具有两个平行的基类,所有其它的流类都是从它们直接或间接地派生出来的。 streambuf类:提供对流缓冲区的低级操作 ios类:提供对设备、文件的读写操作 6第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流vC+流类体系 7第十章

4、第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流1通用I/O流类库(1)基类ios(2)输入类istream(3)输出类ostream(4)输入输出类iostream2文件I/O流类库(1)ofstream类(2)ifstream类(3)fstream 类3字符串I/O流类库(1)ostrstream 类(2)istrstream 类(3)strstream类8第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.1.3 与iostream类库有关的头文件(1) iostream.h:包含对输入输出流进行操作的基本信息,提供无格式支持的低级输入输出和有格式支持的高

5、级输入输出操作功能。(2) fstream.h:包含管理文件输入输出操作的有关信息。(3) strstrea.h:包含对内存中数据进行输入输出操作的有关信息。 (4) stdiostream.h:包含进行C风格的输入输出操作的有关信息。(5) iomanip.h:包含输入输出流的格式控制符(manipulator)的有关信息。 当一个程序中需要进行标准流输入输出操作时,则必须包含头文件iostream.h;当需要进行文件流输入输出操作时,则必须包含头文件fstream.h;当需要进行字符串流读/写操作时,则必须包含头文件strstream.h。 9第十章第十章第十章第十章 输入输出流输入输出流

6、输入输出流输入输出流10.1.4 插入与提取运算符的重载 v“”本来在C+中被定义为左位移运算符和右位移运算符,由于在文件iostream.h中对它们进行了重载,使得它们能用作标准类型数据的输入输出运算符。从流中获取数据的操作称为提取操作提取操作,使用提取运算符“”;向流中添加数据的操作称为插入操作插入操作,使用插入运算符“”。v 10第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.2 标准输入输出流 v标准流是不需要打开和关闭文件即可直接操作的流式文件。 vcin:类istream的对象,用来处理标准输入,即键盘输入。 vcout:类ostream的对象,用来处理标准

7、输出,即屏幕输出。 vcerr和clog:类ostream的对象,与错误信息的标准输出设备(屏幕)相关联,前者为非缓冲方式,后者为缓冲方式。10.2.1 标准流类11第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流1标准输入流 vcin是由输入类istream的派生类istream_withassign定义的对象,在缺省的情况下,cin所关联的外部设备为键盘,实现从键盘上输入数据。 cin为缓冲流。 2标准输出流v在C+流类体系中定义的标准输出流是cout、cerr、clog,是由输出类ostream的派生类ostream_withassign定义的对象,在缺省的情况下,co

8、ut、cerr、clog 所关联的外部设备为屏幕,实现数据流输出到屏幕。 cout、clog为缓冲流,而cerr为非缓冲流。 12第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.2.2 格式控制成员函数v数据输出的格式控制可通过两种途径实现:v使用预定义格式控制符带参数(如setw(n))的:在头文件iomanip.h中定义不带参数(如dec)的:在头文件iostream.h中定义v使用由ios类定义的格式控制成员函数:在头文件iostream.h中说明13第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流1输出宽度和填充字符v输出宽度和填充字符可通过由

9、ios类中定义的输出域宽控制成员函数width(n)和填充成员函数fill(c)实现。其中n为输出数据的宽度,c为填充字符。【例10.2】 使用成员函数控制输出宽度及填充方式/*ex10_2.cpp*#include void main() float a=2345.679; cout.fill(*); for (int i=0;i5;i+) cout.width(i+6); coutaendl; 程序运行后输出:2345.682345.68*2345.68*2345.68*2345.68 14第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流2其它格式控制v若要改变流的其它输

10、出格式(如对齐方式),可使用ios类中定义的成员函数setf来实现,函数格式如下:vcout.setf(格式标志)v格式标志在类ios中被定义为枚举值,在引用这些格式标志时要在前面加上类名ios和域运算符“:”。 15第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流v【例10.3】 将学生姓名与比赛得分通过初始化赋给数组name5、score5,指定姓名域宽为10个字符、左对齐,比赛得分为右对齐、用定点方式、小数点后有2位有效数字。v分析:浮点数默认的输出精度为6(即输出6位有效数字),例如浮点数3456.7891 显示为3456.79。若要实现指定小数点后显示几位有效数字,

11、应先用setf设置定点方式,再用成员函数precision(n)设置小数点后n位有效数字。 16第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.2.3 数据输入输出成员函数 1数据输入成员函数 (1)字符输入成员函数成员函数get()可以从输入流中获取字符,并将它存放在指定的变量中。该函数有以下两种格式:ch=cin.get() cin.get(ch) 函数实现从输入流中读取一个字符,赋给字符变量ch。采用第2种格式时,如果读取数据成功则函数返回非0值(真),否则(遇结束标志符)返回0值(假)。 17第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流【例

12、10.4】 读取字符/*ex10_4.cpp*#include void main(void) char c1,c2,c3; cout输入字符:; c1=cin.get(); cin.get(c2); cin.get();/读入空白字符 cin.get(c3); coutc1=c1endl; coutc2=c2endl; coutc3=c3endl;输入字符:abcc1=ac2=bc3=c18第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流(2)字符串输入成员函数 从输入流中一次读取一串字符,有以下2种方式:cin.get(字符数组或字符指针,字符个数n,终止字符)cin.g

13、etline(字符数组或字符指针,字符个数n,终止字符) 从输入流中读取n1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),否则(遇文件结束符)返回0值(假)。第三个参数缺省为换行符。 19第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流【例10.5】 读取字符串/*ex10_5.cpp*#include void main(void) char str120,str220; cout输入一行字符串:; cin.getline(str1,20); cin.get(str2,20

14、); coutstr1=str1endl; coutstr2=str2endl;程序运行结果如下:输入2行字符串:This is a book. This is a book. str1=This is a book.str2=This is a book.20第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流2数据输出成员函数 (1)字符输出成员函数 函数put()用于输出单个字符,格式如下: cout.put(char c); put函数的参数c可以是字符或字符的ASCII码,例如: cout.put(a); /在屏幕上显示字符a (2)字符串输出成员函数 函数write(

15、)用于输出一个指定长度的字符串,格式如下: cout.write(字符串,字符个数n) ; 例如: cout.write(This is a book. n,20);21第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.3 文件操作与文件流 10.3.1 文件的概念 1文件 文件(File)指存储于外部介质上的信息集合,分为文本文件和二进制文件。 文本文件以字节(byte)为单位,每字节为一ASCII 码,代表一个字符,故又称字符文件;二进制文件又称为内部文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。例如整数1025,以文本形式(310032

16、36H)存储占用四个字节,以二进制形式(0401H)存储则只占用两个字节。22第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流2文件的操作文件操作分成4步:(1)定义文件流对象)定义文件流对象 ifstream 文件输入流对象; ofstream 文件输出流对象; fstream 文件输入/出流对象;(2)打开文件)打开文件 文件流对象.open(磁盘文件名,输入输出模式)也可以在定义文件流对象时指定文件打开模式,在构造过程中打开该文件。定义方式如下:vifstream 文件流对象(磁盘文件名,输入输出模式); vofstream 文件流对象(磁盘文件名,输入输出模式); v

17、fstream 文件流对象(磁盘文件名,输入输出模式);23第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流(3)读)读/写文件写文件(4)关闭文件)关闭文件 文件流对象.close( );24第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.3.2 文本文件的读写1使用提取运算符或插入运算符对文件进行读写操作。【例10.6】 使用提取运算符和插入运算符将源文件中的前100个字符复制到目标文件中。# include void main(void) char fname120,fname220; coutfname1; coutfname2; ifstre

18、am infile(fname1);/定义文件输入流对象,打开源文件定义文件输入流对象,打开源文件 if (!infile) cout不能打开输入文件:不能打开输入文件:fname1endl; return; 25第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流ofstream outfile(fname2); /定义文件输出流对象,打开目定义文件输出流对象,打开目标标文件文件if (!outfile) cout不能打开目标文件:不能打开目标文件:fname2endl; return; char ch; int i; i=0; while(ich; /从源文件中提取一个字符到

19、变量从源文件中提取一个字符到变量ch中;中; outfilech; /将将ch中的字符写入目标文件中。中的字符写入目标文件中。 i=i+1; infile.close(); /关闭源文件关闭源文件 outfile.close(); /关闭目标文件关闭目标文件26第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流2使用成员函数进行文件的读写操作【例10.7】 使用成员函数get与put将源文件的内容复制到目标文件中分析:先打开源文件和目标文件,依次从源文件中读取一个字符,并将所读字符写入目标文件中,直到源文件中所有字符读完为止。 27第十章第十章第十章第十章 输入输出流输入输出流

20、输入输出流输入输出流10.3.3 二进制文件的读写 1二进制文件的写操作二进制文件的写操作二进制文件的写操作是通过成员函数二进制文件的写操作是通过成员函数write()来实现:来实现:write(字符数组或字符指针字符数组或字符指针, 字节数字节数); 2二进制文件的读操作二进制文件的读操作二进制文件的读操作是通过成员函数二进制文件的读操作是通过成员函数read()来实现:来实现:read(字符数组或字符指针字符数组或字符指针, 字节数字节数 ); 28第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流3测试文件结束测试文件结束 测试二进制文件结束位置可用成员函数eof()实现

21、,当到达文件结束位置时,该函数返回零值,否则返回非零值。4返回读入数据的长度 返回最近一次输入所读入的字节数可用成员函数gcount()实现。29第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.3.4 文件的随机读写 v从文件中任何位置开始进行读或写数据,这种读写方式称为文件的随机访问或直接存取。 v1文件定位 vC+ 的类库fstream中定义了两个与文件相联系的指针v读指针v写指针 vC+的文件定位分为读位置和写位置的定位,对应的成员函数 vseekg():设置读位置vSeekp:设置写位置 30第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流v(

22、1)读操作定位v相对文件头指针移动n个字节 vseekg(位移量n); v相对参照位置指针移动n个字节 vseekg(位移量n, 参照位置 );参照位置可取三个值: io3:beg或0:文件头。 io3:cur或1:文件指针当前的位置。 io3:end或2:文件尾。v(2)写操作定位v文件写操作的定位是通过成员函数seekp实现的。v seekp(位移量n); v seekp(位移量n, 参照位置 );31第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流v2其它成员函数v(1)tellg()v用于返回输入文件中文件指针的当前位置,返回值为streampos类型。 v(2)te

23、llp()v用于返回输出文件中文件指针的当前位置,返回值为streampos类型。v(3)ignore(字符数n,终止字符)v用于略过n个字符。 32第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.4 字符串流 字符串流则是以内存中用户自定义的字符数组(字符串)为输入输出的对象,因此字符串流又称为内存流。 10.4.1 字符串流的概念字符串流对象关联的不是文件,而是内存中的一个字符数组,因此不需打开和关闭流对象。字符串流类包括istrstream、ostrstream和strstream。 33第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.4.

24、2 字符串流的输出操作1字符串输出流的定义字符串输出流的定义 定义字符串输出流,即建立存储所插入数据的数组对象的定义字符串输出流,即建立存储所插入数据的数组对象的语句格式为:语句格式为:ostrstream 字符串流对象字符串流对象(字符数组,缓冲区大小字符数组,缓冲区大小n,操作模式操作模式); strstream 字符串流对象字符串流对象(字符数组,缓冲区大小字符数组,缓冲区大小n,操作模式操作模式);2字符串输出流的操作字符串输出流的操作 (1)pcount() 返回当前字符数组中已经插入的字符个数;返回当前字符数组中已经插入的字符个数;(2)str() 返回存储在字符数组中的字符串。返

25、回存储在字符数组中的字符串。34第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流10.4.3 字符串流的输入操作v1字符串输入流的定义v定义字符串输入流,即初始化所创建的字符串输入流对象的语句格式为:vistrstream 字符串流对象(字符数组,缓冲区大小n); vstrstream 字符串流对象(字符数组,缓冲区大小n,ios:in); v2字符串输入流的操作v一个字符串输入流被定义后,可以调用相应的成员函数进行数据的输入操作。35第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流练习题(1)对于语句coutendlx;中的各个组成部分,下列叙述中错误的是

26、( )。 A)“cout”是一个输出流对象 B)“endl”的作用是输出回车换行 C)“x”是一个变量 D)称作提取运算符(2)有如下程序:#include #include using namespace std;void main() cout.fill(*); cout left setw(4) 123 OK endl;执行这个程序的输出结果是( )。A)123*OK B)123*OK* C)*123OK D)*123*OK36第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流(3)有如下程序:#include#includeusing namespace std; vo

27、id main()cout.fill(*);cout.width(6);cout.fill(#);cout123endl;执行后的输出结果是( )。A)#l23 B)123# C)*123 D)123*练习题37第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流(4)使用输入输出操作符setw,可以控制( )。A)输出精度 B)输出宽度 C)对齐方式 D)填充字符练习题(5)有如下4 个语句: coutAsetfill(*)leftsetw(7)Bendl; coutsetfill(*)leftsetw(7)ABendl; coutAsetfill(*)rightsetw(7)

28、Bendl; coutsetfill(*)rightsetw(7)ABendl;其中能显示A*B 的是( )。A) B) C) D)38第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流练习附加题#include using namespace std;class Apublic: A() cout A; A() cout A; ;class B : public A A* p; public: B() cout B; p = new A(); B() cout B; delete p; ;void main() B obj; 执行这个程序的输出结果是( )。A)BAAABA

29、B)ABABAAC)BAABAA D)ABA ABA39第十章第十章第十章第十章 输入输出流输入输出流输入输出流输入输出流有如下程序:#includeusing namespace std;class MyClasspublic:MyClass(int i=0)cout1;MyClass(const MyClass&x)cout2;MyClass& operator=(const MyClass&x)cout3; return*this;MyClass()cout4;void main()MyClass obj1(1),obj2(2),obj3(obj1);运行时的输出结果是( )。A)112444 B)11114444 C)121444 D)1131444440

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号