第10章IO流标准库.ppt

上传人:本田雅阁 文档编号:3417986 上传时间:2019-08-23 格式:PPT 页数:39 大小:209.54KB
返回 下载 相关 举报
第10章IO流标准库.ppt_第1页
第1页 / 共39页
第10章IO流标准库.ppt_第2页
第2页 / 共39页
第10章IO流标准库.ppt_第3页
第3页 / 共39页
第10章IO流标准库.ppt_第4页
第4页 / 共39页
第10章IO流标准库.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《第10章IO流标准库.ppt》由会员分享,可在线阅读,更多相关《第10章IO流标准库.ppt(39页珍藏版)》请在三一文库上搜索。

1、第二部分 C+面向对象程序设计,第十章 C+ I/O流标准库,金志刚 ,10.1 C+ I/O流概述,1. I/O流 外部设备和计算机内存之间流动的一系列字节。输入时,字节从输入设备(如从键盘、磁盘等)流向内存;输出时,字节从内存流向输出设备(如显示器、打印机、磁盘等)。,2. C+ I/O流类库,I/O流类列表,10.1 C+ I/O流概述,4.预定义的I/O流类对象 cin:istream 类的对象,处理标准输入设备的输入。 cout:ostream 类的对象,处理标准输出设备的输出。 cerr:ostream 类的对象,处理在标准输出设备上输出 错误信息(非缓冲)。 clog:ostre

2、am 类的对象,处理在标准输出设备上输出 错误信息(缓冲)。,5.重载的通用的流算符 (提取运算符):输入,从流中获取数据到内存。 (插入运算符):输出,将内存数据添加到流中输入。,10.1 C+ I/O流概述,重要提示: “读”、“输入”、“提取”表示的是同样的含义,即把数据从外部设备传到计算机内存。 “写”、“输出”、“插入”表示的是同样的含义,即把数据从计算机内存传到外部设备。,例 “”(提取运算符)和“xy; cout“x=“x“ y=”yn;,磁盘文件简介, 输入流的起点和输出流的终点都可以是磁盘文件。,1)文本文件:文件中信息形式为ASCII码字符,每个字符占一 个字节。 2)二进

3、制文件:文件中信息的形式与其在内存中的形式相同。, 文件:C+把每个文件都看成是一个有序的字节序列,每个文件都以文件结束标志结束。例如:, 按照文件中数据的组织形式可把文件分为:, 文件的读写方式:,1)顺序方式: 按数据在文件中的物理排列顺序依次读或写。 2)随机方式: 在文件的任何位置进行读或写。,磁盘文件简介,10.2 输出流,定义文件输出流对象 向一个磁盘文件输出前,需要定义一个ofstream类的对象(输出流对象)。方法主要有两种:,方法1: 定义输出流类对象, 调用open成员函数打开文件,例:ofstream outfile; /建立文件输出流类对象 outfile.open(“

4、datal.txt”,ios:out); /使流对象与文件建立联系(打开文件),方法2: 在定义输出流类对象时打开相关联的文件,例:ofstream outfile (“datal.txt”,ios:out);,10.2 输出流,2.向输出流插入数据 1)使用输出流插入运算符(),例 cout“x=“3.52n;, 流类库中重载的运算符返回了对其左操作对象的引 用,因此在一条语句中可以连续使用 。,例1 使用插入运算符()向文本文件写入信息。, 在对打开的文件的写操作完成后,应调用close()成员函数关闭该文件。,例2 把前100个质数写入文本文件。, 任何不是质数的整数都可以被更小的质数整

5、除。,10.2 输出流,2.向输出流插入数据 2)使用输出流类成员函数put()输出字符。,例 cout.put(H).put(i).put(!)endl;, put()成员函数返回调用它的对象的引用,因此在一条 语句中可以连续调用put()成员函数。,10.2 输出流,2.向输出流插入数据 3)使用输出流类成员函数write()以原始数据形式输出。,例 char buffer=“HAPPY BIRTHDAY“; cout.write(buffer,5)endl;, write()成员函数返回调用它的对象的引用。, 调用write()时,第一个实参必须是char类型的地址。,例2 使用put(

6、)和write()向文本文件写入信息。,例3 使用write()向二进制文件写入信息。, 调用write()时,第一个实参必须是char类型的地址。,10.3 输入流,定义文件输入流对象 从一个磁盘文件输入前,需要定义一个ifstream类的对象(输入流对象)。方法主要有两种:,方法1: 先定义文件对象,然后调用open成员函数打开文件,例:ifstream infile; /建立文件输入流对象 infile.open(“datal.txt”,ios:in); /打开文件,使流对象与文件建立联系,方法1: 在定义文件对象时打开相关联的文件,例:ifstream infile (“datal.t

7、xt”,ios:in);,10.3 输入流,2.从输入流提取数据 1)使用输入流提取运算符(),例 int x,y; cinxy;, 空格符、回车符作为数据间的分割符。若遇到输入的数据类型有错或文件结束符时,提取工作将终止。,例1 使用提取运算符()从文本文件读信息。,例2 读取写在文本文件中100个质数,并将它们显示在屏幕上。,10.3 输入流,2.从输入流提取数据 2)使用输入流类成员函数get() 读入一个字符。,例 char c; while(c=cin.get()!=EOF) cout.put(c);, 不带参数的get()函数。从输入流中读取一个字符,并把该字符作为函数返回值,若遇

8、文件结束符,返回EOF。, 有一个参数的get()函数。下例中,从输入流中读取一个字符赋给c,若遇文件结束符,返回0,否则返回非0。,例 char c; while(cin.get(c) cout.put(c);,10.3 输入流,2.从输入流提取数据 3)使用输入流类成员函数get()和getline()读入字符串。这两个函数的调用形式为:, 从输入流读取n-1个字符(若遇终止字符提前结束),在其后加入0,存放在由字符地址指向的内存空间。终止字符的缺省值为n 。它们的差别是:get()使终止字符保留在输入流中,而getline()把终止字符从输入流中删除。,输入流对象.get(字符地址,字符

9、个数n,终止字符); 输入流对象.getline(字符地址,字符个数n,终止字符);,例2 使用成员函数getline()从文本文件读信息。,例3 使用成员函数getline()从文本文件读信息。, 从输入流读数据时,若遇文件结束符,成员函数eof()函数值为非0,否则为0。,10.3 输入流,2.从输入流提取数据 4)使用输入流类成员函数read() 以原始数据形式输入。,例 char buffer80; cin.read(buffer,20);, 该函数主要用于对二进制文件的读取。,例4 读写二进制文件示例。,string流类(字符串流类),1.字符串流 以内存中用户定义的字符数组为输入、

10、输出的对象,也称为内存流。,2.字符串流类(包含在 strstrea.h文件中) ostrstream、istrstream 和strstream,例 字符串流类使用示例。,12345 25.6 number=1.25,程序运行结果:,以随机方式读/写文件, 对文件的读写受到一个定位指针的控制。 读指针:从读指针当前所指位置读出数据,向后移动读指针使其指向下一个数据。 写指针:把数据写到写指针当前所指位置,向后移动写指针,使其指向下一个写数据的位置。, 利用C+流类中提供的成员函数,可改变读/写指针,从而实现对文件的随机读/写。, 随机访问多用于二进制文件。,以随机方式读/写文件, 操作写指针

11、的成员函数 1)移动写指针。 调用格式1: 输出流对象名.seekp(流中位置); 调用格式2: 输出流对象名.seekp(偏移量,参照位置); 取ios类中的枚举量:beg(0)相对文件头; curr(1)相对文件当前位置;end(2)相对文件尾。 2)返回写指针当前位置(相对于文件头的字节数)。 调用格式: 输出流对象名.tellp(),以随机方式读/写文件, 操作读指针的成员函数 1)移动读指针。 调用格式1: 输入流对象名.seekg(流中位置); 调用格式2: 输入流对象名.seekg(偏移量,参照位置); 取ios类中的枚举量:beg(0)相对文件头; curr(1)相对文件当前位

12、置;end(2)相对文件尾。 2)返回读指针当前位置(相对于文件头的字节数)。 调用格式: 输入流对象名.tellg(),例 文件的随机访问示例。把100个素数存入文件data.bin。从文件data.bin中取出第n个素数并输出。,10.5 格式化输入输出, 格式化输入输出是指控制文本模式I/O流的格式。例如,设置字段宽度、对齐方式、输出数字的精度等。C+提供两种进行格式化输入输出的方法: 用ios类的成员函数设置格式 使用格式操纵算子 格式成员函数和格式操纵算子详细情况见书。,例:格式化输出成员函数使用示例。,0123456789012345 1234 1234 1234 1234* *1

13、234 123.46,成员函数width()只对一个输出项有效。,运行结果:,0123456789012345 *1234 1234* *1234 $12.346,运行结果:,例:操纵算子使用示例,10.6 异常处理,1.异常 程序运行时出现的异常情况。例如,用new无法得到需要的空间、数组下标越界、运算结果溢出、除数为0等。,例 char *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; ,

14、2.处理异常的常用方法 终止程序的运行。, 调用一个预先定义的异常处理程序。,10.6 异常处理,3.C+的异常处理机制 C+的异常处理机制包括: 1)抛出异常 形式为: throw 表达式; 2)try块(检测异常) 形式为:try 可能抛出异常且需要检查的程序段 3)catch块(捕捉异常) 形式为:catch(异常类型参数)处理异常程序段,例 除数为0的异常处理。,10.6 异常处理,4.标准异常 C+标准库中定义了一些异常类(在头文件stdexcept中),可以在编写的程序中使用这些类,报告异常情况。,5.几个标准异常类 1)out_of_range类:可表示数组下标越界。 2)overflow_error类:可表示发生了运算上溢错误。 3)underflow_error类:可表示发生了运算下溢错误。, 每个标准异常类都有一个what()成员函数,用来返回描述异常的信息。,例 标准异常的使用示例。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1