《第10章 IO流标准库.ppt》由会员分享,可在线阅读,更多相关《第10章 IO流标准库.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二部分第二部分 C+C+面向对象程序设计面向对象程序设计第十章第十章 C+I/O流标准库流标准库金志刚金志刚10.1 C+I/O10.1 C+I/O流概述流概述1.I/O1.I/O流流 外部设备和计算机内存之间流动的一系列字节。输入外部设备和计算机内存之间流动的一系列字节。输入时,字节从输入设备(如从键盘、磁盘等)流向内存;输出时,时,字节从输入设备(如从键盘、磁盘等)流向内存;输出时,字节从内存流向输出设备(如显示器、打印机、磁盘等)。字节从内存流向输出设备(如显示器、打印机、磁盘等)。2.C+I/O2.C+I/O流类库流类库iosistreamiostreamostreamifstrea
2、mfstreamofstream I/OI/OI/OI/O流类列表流类列表流类列表流类列表 类类类类 名名名名说说说说 明明明明包含文件包含文件包含文件包含文件ios流的抽象基类流的抽象基类iostream.histream通用输入流类和其他输通用输入流类和其他输入流的基类入流的基类iostream.hifstream输入文件流类输入文件流类fstream.hofstream输出文件流类输出文件流类fstream.hiostream通用输出通用输出/输出流类和其输出流类和其他输出他输出/输出流的基类输出流的基类iostream.hfstream输入输入/输出文件流类输出文件流类fstream.
3、h10.1 C+I/O10.1 C+I/O流概述流概述4.4.预定义的预定义的I/OI/O流类对象流类对象 cin:istream 类的对象,处理标准输入设备的输入。类的对象,处理标准输入设备的输入。cout:ostream 类的对象,处理标准输出设备的输出。类的对象,处理标准输出设备的输出。cerr:ostream 类的对象,处理在标准输出设备上输出类的对象,处理在标准输出设备上输出 错误信息(非缓冲)。错误信息(非缓冲)。clog:ostream 类的对象,处理在标准输出设备上输出类的对象,处理在标准输出设备上输出 错误信息(缓冲)。错误信息(缓冲)。5.5.重载的通用的流算符重载的通用的
4、流算符 (提取运算符):输入,从流中获取数据到内存。(提取运算符):输入,从流中获取数据到内存。”(提取运算符)和(提取运算符)和“xy;coutx=x“y=”yn;磁盘文件简介磁盘文件简介 输入流的起点和输出流的终点都可以是磁盘文件。输入流的起点和输出流的终点都可以是磁盘文件。文件结束符文件结束符 1 2 3 4 5 n-1 1 2 3 4 5 n-11 1)文本文件:文本文件:文件中信息形式为文件中信息形式为ASCII码字符,每个字符占一码字符,每个字符占一 个字节个字节。2 2)二进制文件:文件中信息的形式与其在内存中的形式相同二进制文件:文件中信息的形式与其在内存中的形式相同。文件:文
5、件:C+把每个文件都看成是一个有序的字节序列,每个把每个文件都看成是一个有序的字节序列,每个文件都以文件结束标志结束。例如:文件都以文件结束标志结束。例如:按照文件中数据的组织形式可把文件分为:按照文件中数据的组织形式可把文件分为:文件的读写方式:文件的读写方式:1)顺序方式:)顺序方式:按数据在文件中的物理排列顺序依次读或写。按数据在文件中的物理排列顺序依次读或写。2)随机方式:)随机方式:在文件的任何位置进行读或写。在文件的任何位置进行读或写。磁盘文件简介磁盘文件简介10.2 10.2 输出流输出流 1.1.定义文件输出流对象定义文件输出流对象 2.2.向向一个一个磁盘磁盘文文件输出件输出
6、前前,需要定义,需要定义一个一个ofstream类的对类的对象(输出流对象象(输出流对象)。方法主要有两种方法主要有两种:方法方法方法方法1 1 1 1:定义输出流类对象定义输出流类对象,调用调用open成员函数打开文件成员函数打开文件 例:例:ofstream outfile;/建立文件输出流类对象建立文件输出流类对象 outfile.open(“datal.txt”,ios:out);/使流对象与文件建立联系(打开文件)使流对象与文件建立联系(打开文件)方法方法方法方法2 2 2 2:在定义输出流类对象时打开相关联的文件在定义输出流类对象时打开相关联的文件 例:例:ofstream out
7、file(“datal.txt”,ios:out);10.2 10.2 输出流输出流2.2.向输出流插入数据向输出流插入数据 1 1)使用输出流插入运算符(使用输出流插入运算符()例例 coutx=3.52n;流类库中重载的运算符流类库中重载的运算符返回了对其左操作对象的引返回了对其左操作对象的引 用,因此在一条语句中可以连续使用用,因此在一条语句中可以连续使用 。例例1 1 使用插入运算符(使用插入运算符()向文本文件写入信息。)向文本文件写入信息。在对打开的文件的写操作完成后,应调用在对打开的文件的写操作完成后,应调用close()成员成员函数关闭该文件。函数关闭该文件。例例2 2 把前把
8、前100100个质数写入文本文件。个质数写入文本文件。任何不是质数的整数都可以被更小的质数整除。任何不是质数的整数都可以被更小的质数整除。10.2 10.2 输出流输出流2.2.向输出流插入数据向输出流插入数据 2 2)使用输出流类使用输出流类成员函数成员函数put()输出字符输出字符。例例 cout.put(H).put(i).put(!)endl;put()成员函数返回调用它的对象的引用,因此在一条成员函数返回调用它的对象的引用,因此在一条 语句中可以连续调用语句中可以连续调用put()成员函数。成员函数。10.2 10.2 输出流输出流 2.2.向输出流插入数据向输出流插入数据 3 3)
9、使用输出流类使用输出流类成员函数成员函数write()以原始数据形式输出。以原始数据形式输出。例例 char buffer=HAPPY BIRTHDAY;cout.write(buffer,5)例例 int x,y;cinxy;空格符、回车符作为数据间的分割符。若遇到输入的数空格符、回车符作为数据间的分割符。若遇到输入的数据类型有错或文件结束符时,提取工作将终止。据类型有错或文件结束符时,提取工作将终止。例例1 1 使用提取运算符(使用提取运算符()从文本文件读信息。)从文本文件读信息。例例2 2 读取写在文本文件中读取写在文本文件中100100个质数,并将它们显示在屏幕上。个质数,并将它们显
10、示在屏幕上。10.3 10.3 输入流输入流2.2.从输入流提取数据从输入流提取数据 2 2)使用输入流类使用输入流类成员函数成员函数get()读入一个字符读入一个字符。例例 char c;while(c=cin.get()!=EOF)cout.put(c);不带参数的不带参数的get()函数函数。从输入流中读取一个字符,并从输入流中读取一个字符,并把该字符作为函数返回值,若遇文件结束符,返回把该字符作为函数返回值,若遇文件结束符,返回EOF。有一个有一个参数的参数的get()函数函数。下例中,。下例中,从输入流中读取一从输入流中读取一个字符个字符赋给赋给c,若遇文件结束符,返回,若遇文件结束
11、符,返回0,否则,否则返回返回非非0。例例 char c;while(cin.get(c)cout.put(c);10.3 10.3 输入流输入流2.2.从输入流提取数据从输入流提取数据 3 3)使用输入流类使用输入流类成员函数成员函数get()和和getline()读入字符读入字符串。这两个函数的串。这两个函数的调用形式为:调用形式为:从输入流读取从输入流读取n-1个字符(若遇终止字符提前结束),在个字符(若遇终止字符提前结束),在其后加入其后加入0,存放在由字符地址指向的内存空间。终止,存放在由字符地址指向的内存空间。终止字符的缺省值为字符的缺省值为n 。它们的差别是:。它们的差别是:ge
12、t()使终止字符使终止字符保留在输入流中,而保留在输入流中,而getline()把终止字符从输入流中删除。把终止字符从输入流中删除。输入流对象输入流对象.get(字符地址字符地址,字符个数字符个数n,n,终止字符终止字符);输入流对象输入流对象.getline(字符地址字符地址,字符个数字符个数n,n,终止字符终止字符);例例2 2 使用成员函数使用成员函数getline()从文本文件读信息。从文本文件读信息。例例3 3 使用成员函数使用成员函数getline()从文本文件读信息。从文本文件读信息。从输入流读数据时,若遇文件结束符,从输入流读数据时,若遇文件结束符,成员函数成员函数eof()函
13、函数值为非数值为非0,否则为,否则为0。10.3 10.3 输入流输入流2.2.从输入流提取数据从输入流提取数据 4 4)使用输入流类使用输入流类成员函数成员函数read()以原始数据形式输入。以原始数据形式输入。例例 char buffer80;cin.read(buffer,20);该函数主要用于对二进制文件的读取该函数主要用于对二进制文件的读取。例例4 4 读写二进制文件示例。读写二进制文件示例。string流类(字符串流类)流类(字符串流类)1.1.字符串流字符串流 以内存中用户定义的字符数组为输入、输出的以内存中用户定义的字符数组为输入、输出的对象,也称为内存流。对象,也称为内存流。
14、2.2.字符串流类字符串流类(包含在(包含在 strstrea.h文件中)文件中)ostrstream、istrstream 和和strstream例例 字符串流类使用示例。字符串流类使用示例。12345 25.6 number=1.25程序运行结果:程序运行结果:以随机方式读以随机方式读/写文件写文件 对文件的读写受到一个定位指针的控制。对文件的读写受到一个定位指针的控制。读指针:从读指针当前所指位置读出数据,向后移动读读指针:从读指针当前所指位置读出数据,向后移动读指针使其指向下一个数据。指针使其指向下一个数据。写指针:把数据写到写指针当前所指位置,向后移动写写指针:把数据写到写指针当前所
15、指位置,向后移动写指针,使其指向下一个写数据的位置。指针,使其指向下一个写数据的位置。利用利用C+C+流类中提供的成员函数,可改变读流类中提供的成员函数,可改变读/写指针,从而写指针,从而实现对文件的随机读实现对文件的随机读/写。写。随机访问多用于二进制文件。随机访问多用于二进制文件。以随机方式读以随机方式读/写文件写文件 操作写指针的成员函数操作写指针的成员函数 1 1)移动写指针。)移动写指针。调用格式调用格式调用格式调用格式1 1 1 1:输出流对象名输出流对象名.seekp(流中位置流中位置);调用格式调用格式调用格式调用格式2 2 2 2:输出流对象名输出流对象名.seekp(偏移量
16、偏移量,参照位置参照位置);取取iosios类中的枚举量:类中的枚举量:beg(0)相对文件头;相对文件头;curr(1)相对文件当前位置;相对文件当前位置;end(2)相对文件尾。相对文件尾。2 2)返回写指针当前位置(相对于文件头的字节数)。)返回写指针当前位置(相对于文件头的字节数)。调用格式:调用格式:调用格式:调用格式:输出流对象名输出流对象名.tellp()以随机方式读以随机方式读/写文件写文件 操作读指针的成员函数操作读指针的成员函数 1 1)移动读指针。)移动读指针。调用格式调用格式调用格式调用格式1 1 1 1:输入流对象名输入流对象名.seekg(流中位置流中位置);调用格
17、式调用格式调用格式调用格式2 2 2 2:输入流对象名输入流对象名.seekg(偏移量偏移量,参照位置参照位置);取取iosios类中的枚举量:类中的枚举量:beg(0)相对文件头;相对文件头;curr(1)相对文件当前位置;相对文件当前位置;end(2)相对文件尾。相对文件尾。2 2)返回读指针当前位置(相对于文件头的字节数)。)返回读指针当前位置(相对于文件头的字节数)。调用格式:调用格式:调用格式:调用格式:输入流对象名输入流对象名.tellg()例例 文件的随机访问示例。把文件的随机访问示例。把100100个素数存入文件个素数存入文件data.bindata.bin。从。从文件文件da
18、ta.bindata.bin中取出第中取出第n n个素数并输出。个素数并输出。10.5 10.5 格式化输入输出格式化输入输出 格式化输入输出是指控制文本模式格式化输入输出是指控制文本模式I/OI/O流的格式。例如,流的格式。例如,设置字段宽度、对齐方式、输出数字的精度等。设置字段宽度、对齐方式、输出数字的精度等。C+C+提供两种提供两种进行格式化输入进行格式化输入 输出的方法输出的方法:用用ios类的成员函数设置格式类的成员函数设置格式 使用格式操纵算子使用格式操纵算子 格式成员函数和格式操纵算子详细情况见书。格式成员函数和格式操纵算子详细情况见书。例:例:格式化输出成员函数使用示例。格式化
19、输出成员函数使用示例。01234567890123451234 123412341234*1234123.46成员函数成员函数width()只对一个输出项有效。只对一个输出项有效。运行结果:运行结果:0123456789012345*1234 1234*1234$12.346 运行结果:运行结果:例:例:操纵算子使用示例操纵算子使用示例 10.6 10.6 异常处理异常处理1.1.异常异常 程序运行时出现的异常情况。例如,用程序运行时出现的异常情况。例如,用new无法得无法得到需要的空间、数组下标越界、运算结果溢出、除数为到需要的空间、数组下标越界、运算结果溢出、除数为0 0等。等。例例 ch
20、ar*ps=new char256;if(ps=0)exit(1);返回一个标志值。返回一个标志值。例例 int Setch(char s,int i,char x)if(istrlen(s)-1)return 0;else si=x;return 1;2.2.处理异常的常用方法处理异常的常用方法 终止程序的运行。终止程序的运行。调用一个预先定义的异常处理程序。调用一个预先定义的异常处理程序。10.6 10.6 异常处理异常处理3.C+3.C+的异常处理机制的异常处理机制 C+C+的异常处理机制包括:的异常处理机制包括:1 1)抛出异常)抛出异常 形式为:形式为:throw 表达式;表达式;2
21、 2)try块(检测异常)块(检测异常)形式为:形式为:try 可能抛出异常且需要检查的程序段可能抛出异常且需要检查的程序段 3 3)catch块(捕捉异常)块(捕捉异常)形式为:形式为:catch(异常类型参数)异常类型参数)处理异常程序段处理异常程序段例例 除数为除数为0的异常处理。的异常处理。10.6 10.6 异常处理异常处理4.4.标准异常标准异常 C+C+标准库中定义了一些异常类(在头文件标准库中定义了一些异常类(在头文件stdexcept中),中),可以在编写的程序中使用这些类,报告异常情况。可以在编写的程序中使用这些类,报告异常情况。5.5.几个标准异常类几个标准异常类 1 1)out_of_range类类:可表示数组下标越界。可表示数组下标越界。2 2)overflow_error类类:可表示发生了运算上溢错误。可表示发生了运算上溢错误。3 3)underflow_error类类:可表示发生了运算下溢错误。可表示发生了运算下溢错误。每个标准异常类都有一个每个标准异常类都有一个what()成员函数,用来返回描成员函数,用来返回描述异常的信息。述异常的信息。例例 标准异常的使用示例。标准异常的使用示例。