C++程序设计 丁亚涛 第9章 流

上传人:E**** 文档编号:89381910 上传时间:2019-05-24 格式:PPT 页数:44 大小:449.50KB
返回 下载 相关 举报
C++程序设计 丁亚涛 第9章 流_第1页
第1页 / 共44页
C++程序设计 丁亚涛 第9章 流_第2页
第2页 / 共44页
C++程序设计 丁亚涛 第9章 流_第3页
第3页 / 共44页
C++程序设计 丁亚涛 第9章 流_第4页
第4页 / 共44页
C++程序设计 丁亚涛 第9章 流_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《C++程序设计 丁亚涛 第9章 流》由会员分享,可在线阅读,更多相关《C++程序设计 丁亚涛 第9章 流(44页珍藏版)》请在金锄头文库上搜索。

1、流,9,本章导读,标准库 流,C+语言提供了大量经过测试的代码,这些代码编译后作为标准库提供给用户使用。 标准库中包含了大量的类、库函数、常量、变量等,其中有输入输出、数据转换、字符串操作、文件操作等,由于这些标准库由各编译器厂商提供,与具体的操作系统、厂商和编译器版本无关。 标准库主要包括标准函数库和标准类库。标准函数库是从C语言继承下来的输入输出函数、字符和字符串处理函数、数学函数、时间日期函数、内存分配函数等。标准类则是包含标准C+的输入输出流类、字符串类、数字类、异常处理类和杂项类、STL容器类等。,9.1 标准库,使用这些函数和类需要在程序中包含相应的头文件。C+的头文件有3种来源:

2、 1标准C语言库函数的头文件,如:string.h、stdio.h、stdlib.h等。它们带有.h后缀。 2标准C+语言类库的头文件,如:iostream、string、vector等,它们不带.h后缀。 3由标准C语言库函数头文件变成的标准C+头文件,如:cstring、cstdlib等,它们把原有标准C语言的库函数头文件的后缀.h去掉后,在前面加上字母c前缀。 本章主要介绍其中的C+输入输出(I/O)流类。,9.1 标准库,9.2.1 什么是流 流通常与I/O操作联系在一起,使得I/O操作具有面向对象的特征。 数据的输入/输出以字节为单位,依次逐个进行。数据的字节序列经过处理后,从一个内

3、存地址移动到另一个内存地址的数据流动被称为字节流,简称流(stream)。流实际上是通过引入缓冲器机制,将一个对象的数据送到另一个对象的传递过程抽象成数据从一个源点到一个终点的流动操作.,9.2 流,. 按在缓冲区中是否立即处理,流分为缓冲流和非缓冲流。,.按对字节内容的解释方式分,字节流分为字符流(也称文本流)和二进制流,流类库(stream library)是用继承方法建立的输入输出类库。流类库具有两个平行的基类:streambuf类和ios 类,所有流类均以两者之一作为基类。如图所示:,9.2.2 流类库体系,流类及派生类说明,预定义的标准流对象:cin、cout、cerr和clog,需

4、在程序中包含头文件“iostream.h”方可使用。 cin为标准输入流,缺省代表键盘。 cout为标准输出流,缺省代表显示器。 cerr和clog为标准错误信息输出流,缺省代表显示器。 cerr为非缓冲流,其余为缓冲流。 提取运算符:用于从流中提取一个字节序列。 插入运算符:用于向流中插入一个字节序列。 cin使用提取运算符实现数据的输入,其余三个标准流使用插入运算符实现数据的输出。输入流自动将要输入的字节序列形式的数据变换成计算机内部形式的数据(二进制数或ASCII)后,再赋给变量,变换后的格式由变量的类型确定。输出流自动将要输出的数据变换成字节序列后,送到输出流中。,9.2.3 预定义的

5、标准流与提取和插入运算符,#include void main(void) float a,b; cerrab; if(b != 0) cout a / b = a/b n; else cerr “除数为零!n“; ,【例9.1】演示输入输出流,注意:cout、cerr和clog的用法相同但作用不同。cout的输出可重定向,cerr和clog的输出不可重定向。clog为缓冲流,输出的数据不能及时显示。通常将程序中的提示信息(输入提示和出错提示等)用cerr输出,结果数据用cout输出,而clog很少使用。,9.3.1 输入流 istream,9.3 输入与输出流,istream 公共成员函数,

6、#include void main() char c; cout “Enter first sentence followed by Entern“ ; while ( (c = cin.get() != n )cout.put(c); cout endl ; cout “Enter second sentence followed by Entern“ ; while ( cin.get(c) ) if ( c=n ) break; cout.put(c); cout endl ; cout “Enter third sentence followed by Entern“ ; char

7、s 80 ; cin.get ( s, 10 ) ; cout s endl ; ,【例9.2】用get函数从键盘输入字符,9.3.2 输出流ostream,ostream公共成员函数,#include void main() cout “Enter a sentence followed by Entern“ ; char s 26 ; cin.getline ( s, 26 ) ; cout.write(s, 26) ; coutendl; ,【例9.3】输出流操作,9.4.1 文件基本概念 1文件 文件(file)是相关数据的字节序列集合。计算机中的程序、数据、文档常以文件形式存于外存。

8、输入/输出设备具有字节流特征,也是文件。例如键盘是输入文件,显示器、打印机是输出文件。不同的文件所允许的操作可能不同。例如对于磁盘文件,可以将数据写入文件,也可以将数据从文件中取出;而对于打印机文件,只能将数据写入,而不能从打印机文件中取出数据。 C+根据文件内容的数据格式,将文件分为两类:二进制文件和文本文件。文本文件由字符序列组成,也称ASCII码文件。在文本文件中存取的最小信息单位为字符(character),而二进制文件中存取的最小信息单位为字节(Byte)。 2文件名 文件名是为文件取的名字,以区别其它文件。文件名通常使用标识符,但不同的计算机系统,对文件名的命名规则也有所不同。,9

9、.4 文件处理,在C+中,文件操作的基本步骤为: 打开文件 读 / 写文件 关闭文件 1打开文件 包括建立文件流对象;与外部文件关联;指定文件的打开方式。 打开文件有两种方法: 首先建立流对象,然后调用成员函数open()连接外部文件: 流类 对象名 ; 对象名.open ( 文件名 , 方式 ) ; 调用流类带参数的构造函数,建立流对象的同时连接外部文件 流类 对象名 ( 文件名 , 方式 ) ; 其中流类为:ifstream(文件输入流类)、ofstream (文件输出流类)或 fstream(文件流类),9.4.2 文件的打开与关闭,文件打开方式,2关闭文件 关闭文件操作包括把缓冲区数据

10、完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接 若流对象的生存期没有结束,可以重用当一个流对象的生存期结束,系统也会自动关闭文件。 三个文件流类各有一个关闭文件的成员函数 : void ifstream:close(); void ofstream:close(); void fstream:close(); 调用格式如下: 对象名.close( ); / 对象为ifstream、ofstream或 fstream的对象,9.4.2 文件的打开与关闭,3文件使用步骤 说明一个文件流对象,这又被称为内部文件: . ifstream ifile; /只输入用 . ofstream o

11、file; /只输出用 . fstream iofile; /既输入又输出用 使用文件流对象的成员函数open( )打开一个磁盘文件。这样在文件流对象和磁盘文件名之间建立联系。例如: iofile.open(“myfile.txt”,ios:in|ios:out); 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写。 关闭文件: iofile.close();,9.4.2 文件的打开与关闭,#include void main() ofstream ost ; / 创建输出流对象 ost.open(“c:myfile1.dat“);/ 建立文件关联,缺省为文本模式 ost n d

12、 ; / 从流提取数据 cout n endl d endl ; ,【例9.4】文件的打开与关闭,文件打开后,接着就是对文件内容的读写。二进制文件和文本文件所采用的读写操作是不同的。 1文本文件的读/写 文本文件在顺序读写时,可用C+的提取运算符()和插入运算符()进行。,9.4.3 文件的读写,#include #include void main() ofstream ost ; ost.open ( “c:myfile2.txt“ ) ; ost “1234567890“ endl ; int a = 123 ; ost a endl ; ost setw ( 10 ) a endl ;

13、 ost resetiosflags ( ios : right ) setiosflags ( ios : left ) setfill ( # ) setw ( 10 ) a endl ; ost resetiosflags ( ios : left ) setiosflags ( ios : right ) setprecision ( 5 ) setw ( 10 ) 12.34567890 endl ; ost . close ( ) ; ,【例9.5】文本文件读写,#include #include void main ( ) ifstream inf ( “c:myfile2.tx

14、t“); char buf 200 ; inf.getline ( buf, 200 ) ; cout buf “_“ inf.gcount() endl ; inf.get( buf, 200 ) ; cout buf “_“ inf.gcount() endl ; inf.getline ( buf, 200 ,#) ; /读到字符#结束 cout buf “_“ inf.gcount() endl ; inf.close () ; return ; ,【例9.6】从标准流提取文本数据,2二进制文件读写 二进制文件不含空白字符,数据都以8位一个字节为单位,数据没有通过换行符组织成一行行字符

15、串的形式,因此,将二进制文件调到屏幕上显示出来的信息往往是乱码。 二进制文件的读写通常是利用istream类中的get函数和read函数来提取数据,osteam类的put函数和write函数来插入数据。,9.4.3 文件的读写,#include void main () fstream f(“c:myfile3.dat“, ios:in | ios:out | ios:binary ) ; int i ; for( i = 0; i 10 ; i + ) f.write( (char *) ,【例9.7】 随机文件读写,前面很多程序都有: using namespace std; 其含义是使用

16、名字空间std。 名字空间主要用于解决程序中标识符冲突的问题。当程序员不小心在模块中使用了相同的标识符,就会产生冲突。为了解决这个问题,可以将某个区域划分为一个空间,并起个名称。以后如果需要引用这个空间的标识符时,只需要用using命令声明一下就可以了。,9.5 名字空间,#include using namespace std; namespace mycomputer char name20 = “yataoo“; int memorysize = 1024; int displaysize = 22; namespace yourcomputer char name20 = “tandw“; int memorysize = 512; int displaysize = 19; ,【例9.8】演示名

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

最新文档


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

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