第8章 C++ 流标准库11

上传人:qiuji****ngye 文档编号:56763908 上传时间:2018-10-15 格式:PPT 页数:35 大小:191.50KB
返回 下载 相关 举报
第8章 C++ 流标准库11_第1页
第1页 / 共35页
第8章 C++ 流标准库11_第2页
第2页 / 共35页
第8章 C++ 流标准库11_第3页
第3页 / 共35页
第8章 C++ 流标准库11_第4页
第4页 / 共35页
第8章 C++ 流标准库11_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《第8章 C++ 流标准库11》由会员分享,可在线阅读,更多相关《第8章 C++ 流标准库11(35页珍藏版)》请在金锄头文库上搜索。

1、,第八章 C+ I/O流标准库,本章内容, C+ I/O流概述 输出流 输入流 格式化输入输出,8.1 C+ I/O流概述,在C+语言中没有定义专门的输入输出(I/O)语句。输入输出操作是通过I/O流实现的。在C+编译系统中带有一个面向对象的I/O软件包,这就是I/O流类库。“流”(stream)实际上是一个字节序列,是指数据从一个位置流向另一个位置的抽象。在C+程序中,数据可以从键盘或外部文件流入到程序的数据结构中(输入),也可从程序中流向屏幕或外部文件(输出)。通常把从流中获取数据的操作(读操作)称为提取操作,而向流中添加数据的操作(写操作)称为插入操作。,1. C+I/O流的结构,其中,

2、streambuf是一个抽象类。filebuf是文件缓冲类,用以实现文件的打开、读入、写出和关闭等操作。strstreambuf是字符串缓冲类,它支持在内存中进行提取和插入操作。conbuf是控制台缓冲类,它支持对屏幕的输出处理。,流缓冲区类的结构,8.1 C+ I/O流概述,1. C+I/O流的结构,输入输出流类的结构, ios是一个虚基类,它提供了一些对数据流进行设置的功能; ostream、ofstream和ostrstream是向流中插入数据的操作类; istream、ifstream和istrstream从流中提取数据的操作类; iostream、fstream和strstream是

3、流中数据的综合操作类(插入和提取); fstreambase和strstreambase分别是文件和字符流类的公共基类。,I/O流类列表,类 名 说 明 包含文件 ios 流的抽象基类 iostream.h istream 通用输入流类和其他输入流的基类 iostream.h ifstream 输入文件流类 fstream.h ofstream 输出文件流类 fstream.h iostream 通用输入/输出流类和其他输入/输出流的基类 iostream.h fstream 输入/输出文件流类 fstream.h,C+流类中已预定义了四个对象: cin是istream类的对象,用于处理标准输

4、入设 备(键盘)的输入; cout是ostream类的对象,用于处理标准输出设备(屏幕)的输出; cerr是ostream类的对象,用于处理在标准设备上输出出错信息(不带缓冲,即立即显示); clog是ostream类的对象,用于处理在标准输出设备上输出错误信息(带缓冲),当缓冲区满时输出。,流插入和提取运算符 提取运算符表示读取数据到计算机内存中(输入)这两个运算符不仅可以和cincoutcerr和clog这些预定义标准流对象一起使用,而且还可以和用户定义的磁盘文件流对象一起使用同时,用户还可以重载这些运算符,文件的概念,文件 存储在外部设备上的数据的集合。它可以使数据得以长期保存。 C+程

5、序中处理的数据文件按数据组织形式可分为: ASCII文件(文本文件)文件中信息形式为ASCII码字符,每个字符占一个字节。数字3.14159存储时占7个字节. 二进制文件(内部格式文件)把内存中的数据按其在内存中的存储形原样输出到磁盘上。数值数据按二进制方式存储,字符仍按ASCII方式存储。数字3.14159存储时占4个字节.,文件操作,前面,我们讨论的输入输出都是以键盘为输入设备,显示器为输出设备。在实际应用中,常以磁盘文件作为输入/输出的对象。 输入(读文件) 从磁盘文件读取数据 输出(写文件) 将数据输出到磁盘文件。,读、写文件的示意图,标准C+库中包含了对文件进行输入输出的C风格的函数

6、和C+风格的类库,使用它们可在程序中完成对文件的读、写。 下面仅介绍C+风格的类库的使用,8.2 输出流,C+输出流类主要是ostream和ofstream ostream类最适合顺序文本的输出,通常使用coutcerr或clog这些预定义的对象实现输出操作 ofstream类还支持磁盘文件的输出C+中,磁盘文件被看做一个字节序列 要处理磁盘文件,就需要定义文件输出流对象,8.2 输出流, 定义文件输出流对象 方法1:先定义文件对象,然后调用open成员函数打开该文件ofstream outfile;/建立文件输出流对象 outfile.open(“datal.txt”,ios:out); /

7、打开 文件,使流对象与文件“datal.txt”关联 方法2: 在定义文件输出流对象时初始化打开文件 ofstream outfile(“dataltxt“,ios:out|);,输出流常用成员函数, put函数 输出流对象名.put(char ch) 该函数仅输出一个字符,且返回当前输出流对象例如: cout.put(A).put(t); 输出结果为:At write函数输出流对象名.write(char *s,int n) 该函数输出字符指针所指向的字符串中的n个字符当s所指字符串不足n时补空格, 函数返回当前输出流对象例如: cout.write(“12345“,3).write(“AB

8、CDE“,7).put(t); 输出结果为:123ABCDE t,输出流常用成员函数, seekp函数输出流对象名.seekp(流中位置) 输出流对象名.seekp(偏移量,参照位置) 其中,流中位置偏移量均为long型,以字节为单位 参照位置有三种: beg(0)表示相对于流的开始位置 cur(1)表示相对于当前写指针所指向的位置 end(2)表示相对于流的结尾处seekp函数是设置文件输出流写指针位置用的,指出下次写出数据的起始位置利用该指针可实现向磁盘文件随机输出它们均返回当前输出流对象,输出流常用成员函数, tellp函数 输出流对象名.tellp() 该函数返回当前输出流写指针的位置

9、值 close函数 在C+中,对磁盘文件操作后均需关闭该函数的用法是: 输出流对象名.close() 该函数既无参数,也无返回值当程序正常结束时不用此函数也可以完成同样的作用,8.2 输出流,输出流常用成员函数, eof函数 该函数的用法是: 输出流对象.eof() 执行该函数时,若遇到文件结尾的条件,则返回非0值,8.2 输出流,例:写文本文件示例。,程序说明:该程序在datal.txt文件中开始写入11个字符“123ABCDE *”,移动写指针到6,指向字符D,接着从这个位置写入s数组中的字符串最后文件中的字符为: “123ABCC+ IO stream”。,例:写入非字符型数据到二进制文

10、件中。,程序说明:该程序write函数首参数处写成(char*)&ai,目的是把非字符数据强制按字节读取,以满足write函数的要求,8.3 输入流,C+的输入流类主要是istream和ifstream前者最适合输入顺序文本,通常使用预先定义的流对象cin处理;后者支持磁盘文件的输入这些文件或是一个文本文件,或是一个二进制文件与处理磁盘输出文件类似,要处理磁盘输入文件也必须先定义文件输入流对象,8.3 输入流, 定义文件输出流对象 方法1:先定义文件对象,然后调用open函数打开文件,与指定文件建立关联例如: ifstream infile; /建立文件输入流对象 inflie.open(“d

11、atal.txt“,ios:in); 方法2:在定义文件输入流对象时初始化,打开相关联的文件例如: ifstream infile(“data1.txt“,ios:in);,输入流常用成员函数, get函数 该函数有以下三种主要使用形式:输入流对象名.get()这种形式的get函数是从输入流中获取一个字符(包括空白符)作为函数值所谓空白符指的是空格符制表符换行符以及转义字符rtfnv输入流对象名.get(char &c)这种形式的get函数也是从输入流中获取一个字符(包括空白符),并存放在变量c中,8.3 输入流,输入流常用成员函数,输入流对象名.get(char *s,int n,int D

12、elim=n)这种形式的get函数是从输入流中最多获取n-1个字符(包括空白符),并存放在数组s中,缺省结束符为换行符,且自动将换行符转换为字符串结束标志符插入到字符串尾该函数返回当前输入流对象此函数的结束条件除了上面提到的已读入n-1个字符遇到换行符或指定结束符外,当遇到流输入结束符ctrl+z(EOF)时也结束(UNIX中为Ctrl+d),例: get函数使用示例。,本程序的执行示例结果: I am a student. /键盘输入(Enter键结束) I am a student. /屏幕输出 Yuo are a worker. /键盘输入(Enter键结束) Yuo are a wor

13、ker. /屏幕输出 We are learning the C+ language. /键盘输入(Enter键结束) We are learning the C+ language. /屏幕输出,输入流常用成员函数, getline函数 输入流对象名. getline(char *buf,int n,char Delim=n)该函数最多获取n-1个字符并存入字符指针buf所指向的存储区中,缺省结束符为换行符,且自动将换行符转换为字符串结束标志符插入到字符串尾该函数返回当前输入流对象 此函数的结束条件除了上面提到的已读入n-1个字符遇到换行符或指定结束符外,当遇到流输入结束符ctrl+z(EO

14、F)时也结束(UNIX中为Ctrl+d) 可见getline()函数和类似的get()函数的功能完全相同。,例:cin输入与cin.getline输入的区别,本程序的执行示例结果: 输入一个英语句子:You are a student. 用cin读入的字符串是: You 字符数:3 用cin.getline读入的字符串是: are a student. 字符:15,输入流常用成员函数, read函数 该函数的用法是: 输入流对象名. read(char *buf,int n) 该函数从输入流中读取n个字节(含换行符在内)或遇到输入流结束符(ctrl+z)时结束操作读入后存入buf指针所指存储区

15、,且不在字符串尾添加空字符(0)该函数返回当前输入流对象,例:同时读写一个二进制文件,程序说明: 程序输出结果为: 4 2 0 6 5 文件data3.dat既要读又要写, 可以把它定义为fstream类的对象, 这样说明后, 也就是说,iofile既是输入流对象,又是输出流对象文件ata3.dat既同时按二进制读和写,输入流常用成员函数, seekg函数和tellg函数 它们是设置文件流读指针和返回当前文件流读指针位置的函数它们的用法与seekp和tellp函数相同: 输入流对象名.seekg(流中位置) 输入流对象名.seekg(偏移量,参照位置) 输入流对象名.tellg(),例:随机访问文件示例,程序说明: 程序输出结果: gh123,8.4 格式化输入输出,I/O格式化包括:设置字段宽度、对齐方式、输出数字的精度等。 C+提供两种进行格式化输入输出的方法: 用ios类的成员函数设置格式 使用格式操纵算子(manipultors),

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

当前位置:首页 > 行业资料 > 其它行业文档

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