C++课件ch14v2章节

上传人:E**** 文档编号:90579178 上传时间:2019-06-13 格式:PPT 页数:49 大小:809.50KB
返回 下载 相关 举报
C++课件ch14v2章节_第1页
第1页 / 共49页
C++课件ch14v2章节_第2页
第2页 / 共49页
C++课件ch14v2章节_第3页
第3页 / 共49页
C++课件ch14v2章节_第4页
第4页 / 共49页
C++课件ch14v2章节_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C++课件ch14v2章节》由会员分享,可在线阅读,更多相关《C++课件ch14v2章节(49页珍藏版)》请在金锄头文库上搜索。

1、第14章 标准库和输入/输出流,杨琦 西安交通大学 计算机教学实验中心 http:/,教学目标,1.了解I/O流类的层次结构 2.掌握C+标准输入输出流的用法 3.能够使用操纵算子格式化输入输出 4.掌握文件的打开和关闭、读和写的操作方法; 5.掌握文本文件和二进制文件;,授 课 内 容,14.1 标准库概述 14.2 流概述 14.3 输入输出流 14.4 格式化I/O 14.5 文件处理 14.6 对象的输入/输出 14.7 标准模板库(STL)简介,14.1 标准库概述,标准函数库 包含: I/O函数、字符串处理函数、数学函数、时间与日期函数等。 标准类库 包含:I/O流类、字符串类、异

2、常处理类等。,标准库的使用,使用标准库时,应用#include包含相应的头文件 标准函数库的头文件,如:、等 标准类库的头文件, 如:、等,使用std命名空间,通常与 using namespace std; 配合使用。,C +标准类库的头文件名称,14.2 流概述,在C+中,输入输出是通过流来完成的。 对象格式字符序列字符序列对象格式 |传输| 流:字节序列。字节可以是ASCII字符、内部格式的原始数据,图形图像数据。 输入操作(提取):输入设备-内存; 输出操作(插入):内存-输出设备; 其他流:文件流、字符串流等,C+ I/O流类的继承结构,为了便于程序数据的输入/输出,C+预定义了几个

3、标准输入/输出流对象。在程序中可以直接引用它们来输入/输出数据。如下表所示,C+预定义的输入/输出流对象,格式化I/O :包含头文件iomanip 文件处理操作 :包含头文件fstream,例14-1比较cin和cin.get的输入,int main() const int SIZE=80; char ch1,ch2,ch3,buffer1SIZE,buffer2SIZE; cinbuffer1; coutbuffer1endl; ch1=cin.get(); ch2=cin.get(); coutch2endl; cin.get(ch3); coutch3endl; cin.get(buff

4、er2,SIZE,n); coutbuffer2endl; return 0; ,输入:This is a sample,输入输出流的成员函数,输出流(cout) 1. 插入运算符()。 2. 使用成员函数get( )读一个字符。 3. 使用成员函数getline( )读一行字符。,(1)不带参数的get函数 char ch; ch=cin.get(); (2)有一个参数的get函数 char ch; cin.get(ch); (3)有2个参数的get函数 char ch20; cin.get(ch,20);/最多读取19个字符 或者 cin.getline(ch,20);/读取字符串,并删除

5、分隔符,格式化I/O控制,C+中的I/O流允许对I/O操作进行格式控制。 例如:设置域的宽度、指定数制基数、指定小数位数等。 方法: 访问ios类的成员函数 (格式状态标志和格式化成员函数) 操纵符(manipulator) (一些特殊函数),I/O流类中的其它成员函数,1.get()-istream类,可读取输入的空格字符 int get()- 读取一个字符 如:ch=cin.get(); istream 等价 4.ignore(int) - istream类,跳过指定数量的字符 5. putback(char) - istream类,将get()提取的字符放回到输入流中。 6.peek()

6、 - istream类,返回输入流中的下一个字符,并不删除。 7.ground() - istream类,统计最后一次输入的字符个数。,(3) 控制输出格式和成员函数 int width( ) 设置域宽; int fill( ) 填充字符; int precision( ) 设置精度;,#include using namespace std; int main() cout.setf(ios:fixed); cout.precision (4); cout.width(10); cout10.12345endl; cout.fill (*); cout.width (10); cout10.

7、12345endl; cout“Hi“endl; cout.width (10); cout.setf(ios:left); cout10.12345endl; return 0; ,14.4 格式化I/O(流操纵符),操纵算子是插入到流中或从流中抽取出来、影响流的格式状态的函数或对象。 流的格式状态由ios类定义,其中包括指定数据对象的基数,如十进制、八进制、十六进制等,还有输出宽度、精度、填充字符等等。 无参数操纵算子在iostream.h中定义,在使用时应包含该头文件。 在使用带参数操纵算子时,应包含iomanip.h头文件,,例14-2 设置整数流的基数,#include #inclu

8、de using namespace std; int main() int n; cout n; cout n “ in hexadecimal is: “ hex n n dec n “ in octal is: “ oct n n setbase( 10 ) n “ in decimal is: “ n endl; return 0; ,例14-3 设置浮点数精度,#include #include #include int main() double root2 = sqrt( 2.0 ); int places; cout setiosflags( ios:fixed) endl;

9、cout “member function:n“; for ( places = 0; places = 9; places+ ) cout.precision( places ); cout root2 n; cout “manipulator:n“; for ( places = 0; places = 9; places+ ) cout setprecision( places ) root2 n; return 0; ,1、文件的概念 文件是存储在存储介质上(如磁盘、磁带、光盘)的数据集合。 2、文件的类型 文本文件 文本文件在磁盘上存放相关字符的ASCII码,所以又称为ASCII文件

10、。 二进制文件 二进制文件在磁盘上存储相关数据的二进制编码,它是把内存中的数据,按其在内存中的存储形式原样写到磁盘上而形成的文件。,14.5 文件处理,14.5 文件处理,基本概念 打开和关闭文件 读 写 文件指针 缓冲区,打开文件,读写文件,关闭文件,对磁盘文件的操作流程如下:,文件I/O流库类层次结构,与文件操作有关的类有三个: ofstream 写操作文件类(父类:ostream) ifstream 读操作文件类(父类:istream) fstream 读/写操作文件类(父类:iostream),一、打开文件,创建文件流 可调用带参数的构造函数,指定文件名和打开方式: ofstream

11、outfile(“outfile“, iosmode); ifstream in; / 创建了一个输入流 ofstream out; / 创建了一个输出流 fstream io; / 创建了既能输入又能输出 再通过文件流打开某个具体磁盘文件 ofstream outfile; outfile.open(“outfile“, iosmode);,二、文件操作 由于iostream的设备无关性,构造了文件流以后,就可以象前面标准输入输出流的方法一样使用了。 三、关闭文件 在文件操作结束时,可以用close()成员函数关闭该文件。 Outfile.close();,文件打开方式,流状态测试,!,例1

12、4-4 创建一个名为“grade”的文件,并写入数据,#include #include int main() ofstream out(“grade“); if(!out) cout “Cannot open grade file.n“; return 1; out “C+ “ 89.5 endl; out “English “ 93.5 endl; out “Maths “ 87 endl; out.close(); return 0; ,例14-5 读取例14-4创建的“grade”文件,并将文件内容显示在屏幕上。,int main() ifstream in(“grade“); if(

13、!in) cout course grade; cout course grade; cout course grade; cout course “ “ grade “n“; in.close(); return 0; ,3. 二进制文件的操作,在使用运算符读取文本文件时,会发生一些字符转换,空白字符被忽略。如果想要阻止进行字符转换,必须打开一个以二进制方式访问的文件。 参见例14-6 in.get(ch); cout ch;或者cout.put(ch);,例14-6 :以二进制显示文件的内容,例14-6 :显示文件的内容,例14-6 :显示文件的内容,例14-6 :以二进制显示文件的内容,

14、例14-7 :读写二进制文件,例14-7 :读写二进制文件,1、顺序文件与随机文件 顺序访问是指按照从前到后的顺序依次对文件进行读写操作,有些存储设备只支持顺序访问,如磁带。 随机访问也称为直接访问,可以按任意次序对文件进行读写操作 2、随机文件访问方式 对于随机文件,C+流类提供了一个操作它的的文件 指针,该指针可在文件中移动,将它指向要读写的字节位置,然后从该位置读取或写入指定字节数的数据块,这样就实现了文件数据的随机访问。,14.5.5 随机文件操作,3、定位输入文件读指针的成员函数 istream,14.5.5 随机文件操作,ios:seek_dir dir的值 ios:beg ios

15、:cur ios:end,4、定位输出文件写指针的成员函数 ostream,例14-8:模拟电视频道的存储和选择,例14-8:模拟电视频道的存储和选择,程序设计举例,例14-11以十六进制的形式和ASCII码的形式显示文件的内容。,自学内容:14.7 命名空间,命名空间(namespace,又称名字空间)是C +的声明区域,基本意义在于避免程序中的标识符重名,这是结构化程序的基本目标之一。 C +引入的类声明,实际上可以将全局变量括起来,使这些全局变量局部于该类中。C +新的标准将这一方式推广了,不再需要借助一个能产生对象的类,就可通过纯粹起变量命名划分作用的命名空间来做到这一点。 命名空间的

16、声明与类的声明非常类似,同样,指定其中的变量或函数需以命名空间的名字作为域作用限定符。例如:,命名空间名,在命名空间外面对命名空间中的变量与函数访问时,需加上命名空间作用域限定符。命名空间结束处不应该加分号,一个命名空间可以分散在多个文件中。 在命名空间引用到命名空间的变量时,都要加上命名空间前缀,为了解决这件令人感到麻烦的事,C +引入如下语句: using namespace 命名空间名; C +标准中的标准类库的变量与函数都属于命名空间std 例如: using namespace std;,namespace spaceA int m,n; class Person(); class Employee:public Person; void fun2(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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