C程序设计语言揣锦华第9章流类库与输入输出ppt课件

上传人:仙*** 文档编号:138925441 上传时间:2022-08-22 格式:PPT 页数:62 大小:626KB
返回 下载 相关 举报
C程序设计语言揣锦华第9章流类库与输入输出ppt课件_第1页
第1页 / 共62页
C程序设计语言揣锦华第9章流类库与输入输出ppt课件_第2页
第2页 / 共62页
C程序设计语言揣锦华第9章流类库与输入输出ppt课件_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第9章 流类库与输入/输出第第9章章 流类库与输入流类库与输入/输出输出 9.1 输入输入/输出规范流类输出规范流类9.2 文件流类文件流类9.3 串流类串流类9.4 控制符控制符第9章 流类库与输入/输出9.1 输入输入/输出规范流类输出规范流类 9.1.1 输入/输出流的概念 就像C言语一样,C+言语中也没有输入/输出语句。C+的I/O是以字节流的方式实现的,每一个C+编译系统都带有一个面向对象的输入/输出软件包,这就是I/O流类库。其中,流是I/O流类的中心概念。到目前为止,我们不断在运用它。第9章 流类库与输入/输出 所谓流,是指数据从一个对象流向另一个对象。在C+程序中,数据可以从键盘流入到程序中,也可以从程序中流向屏幕或磁盘文件,把数据的流动笼统为“流。流在运用前要被建立,运用后要被删除,还要运用一些特定的操作从流中获取数据或向流中添加数据。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。第9章 流类库与输入/输出 流实践上就是一个字节序列。在输入操作中,字节从输入设备(如键盘、磁盘、网络衔接等)流向内存;在输出操作中,字节从内存流向输出设备(如显示器、打印机、磁盘、网络衔接等)。如图9-1所示。在C+言语中,针对流的特点,提供了如图9-2所示的层次构造来描画流的行为,并给出了I/O流类库的操作。第9章 流类库与输入/输出第9章 流类库与输入/输出图9-2 输入/输出流类层次图 第9章 流类库与输入/输出 表9-1 I/O流类列表 第9章 流类库与输入/输出 9.1.2 输入/输出规范流类 1规范流的设备名 由表9-1可见,I/O流的规范头文件是iostream.h。其中,ostream类经过其派生类ostream_withassign支持以下预先定义的流对象:cout:规范输出。默许设备为屏幕。cerr:规范错误输出。没有缓冲,发送给它的内容立刻被输出,默许设备为屏幕。第9章 流类库与输入/输出 clog:规范错误输出。有缓冲,当缓冲区满时被输出,默许设备为打印机。而istream类经过其派生类istream_withassign支持预先定义的对象。cin:规范输入。默许设备为键盘。第9章 流类库与输入/输出 2原理 cout是ostream类的全局对象,它在头文件iostream.h中的定义如下:ostream cout(stdout);/这里,stdout作为该对象构造时的参数对应每种根本数据类型,ostream类都存在友元,它们都在iostream.h中声明。例如:ostream&operator(int n);ostream&operator(float f);ostream&operator(const char*psz);/.第9章 流类库与输入/输出 如语句:coutHow old are you?;cout是类ostream的对象,(int&n);istream&operator(float&f);istream&operator(char*psz);/.第9章 流类库与输入/输出9.2 文件流类文件流类 fstream、ifstream和ofstream是文件流类,在头文件fstream.h中定义。其中,fstream是ofstream和ifstream多重承继的子类。文件流类不是规范设备,没有cout那样预先定义的全局对象。文件流类支持对磁盘文件的操作。要定义一个文件流类对象,须指定文件名和翻开方式。第9章 流类库与输入/输出类ofstream用于执行文件输出,该类有以下几个构造函数:ofstream:ofstream(filedesc fd);ofstream:ofstream(filedesc fd,char*pch,int nLength);ofstream:ofstream(const char*szName,int nMode=ios:out,int nProt=filebuf:openprot);第9章 流类库与输入/输出类ifstream用于执行文件输入,该类有以下几个构造函数:ifstream:ifstream(filedesc fd);ifstream:ifstream(filedesc fd,char*pch,int nLength);ifstream:ifstream(const char*szName,int nMode=ios:in,int nProt=filebuf:openprot);第9章 流类库与输入/输出 其中最常用的都是最后一个构造函数。该函数有三个参数,第一个参数是指向要翻开的文件名的字符串,后两个参数指定文件的翻开方式。文件翻开方式的详细标志见表9-2。可以用按位OR|运算符组合这些标志,它们作为枚举器定义在ios类中。第9章 流类库与输入/输出 表9-2 文件翻开方式 第9章 流类库与输入/输出 翻开一个输出文件,用于在文件尾添加数据 翻开一个现存文件(用于输入或输出)并查找到结尾 翻开一个输入文件。对于一个ofstream文件,运用ios:in作为一个openmode,可防止删除一个现存文件中现有的内容 翻开一个文件,用于输出。对于一切ofstream对象,此方式是隐含指定的 假设一个文件存在,那么翻开它;否那么该操作失败第9章 流类库与输入/输出 假设一个文件不存在,那么作为新文件翻开它;假设文件已存在,那么该操作失败 翻开一个文件。假设它曾经存在,那么删除其中原有的内容。假设指定了ios:out,但没有指定ios:ate、ios:app和ios:in,那么隐含为此方式 以二进制方式翻开一个文件(默许是文本方式)Nprot是文件维护方式,它的标志如表9-3。第9章 流类库与输入/输出 表9-3 文件维护方式 第9章 流类库与输入/输出【例9-1】向文件myfile中写入一些信息。#includevoid main()ofstream fc(c:tempmyfile);fcConstructs an ofstream object.nAll ofstream constructors construct a filebuf object.n;第9章 流类库与输入/输出 留意:这里的文件名要阐明其途径,要运用双斜杠,由于C+编译器了解单斜杠为字符转换符。在 文 件 翻 开 时,匹 配 了 构 造 函 数ofstream:ofstream(char*),只需求一个文件名,其它为默许。翻开方式默以为ios:out|ios:trunc,即该文件用于接受程序的输出。假设该文件已存在,那么其内容必需先去除,否那么就新建。第9章 流类库与输入/输出假设要检查文件能否翻开,那么须判别成员函数fail():#include void func()ofstream fc(myfile);if(fc.fail()/fail()=1 cerrerror opening filen;return;fca;coutaendl;输出结果为 H第9章 流类库与输入/输出【例9-2】运用串流输入对字符串中的数据进展解读。#include#includechar*ioString(char*);void main()char*str=100 123.456;char*Buf0=ioString(str);coutBuf0iNumberfNumber;/从串流中读入一个整数和浮点数char*Buf1=new char28;ostrstream outS(Buf1,28);outSiNumber=iNumber,fNumber=fNumberendl;return Buf1;第9章 流类库与输入/输出 程序运转结果为 iNumber=100,fNumber=123.456 分析:在函数ioString()中,以pString为输入设备,先定义一个输入串流对象inS,从中输入一个整数和一个浮点数。再开辟一个字符串空间作为输出设备,定义一个输出串流对象outS,将从输入设备输入的两个变量的值输出。第9章 流类库与输入/输出9.4 控制符控制符 9.4.1 运用流对象的成员函数【例9-3】运用width成员函数控制输出宽度。#include void main()double values=1.44,36.47,625.7,4096.24;for(int i=0;i4;i+)第9章 流类库与输入/输出cout.width(10);coutvaluesin;程序运转结果为 1.4436.47625.74096.24第9章 流类库与输入/输出 此例子在一列中以致少10个字符宽按右对齐方式输出数据。从程序的输出结果可以看到,在少于10个字符宽的数值前参与了引导空格。空格是默许的填充符,当输出的数据不能充溢指定的宽度时,系统会自动以空格填充。另外,还可以运用fill成员函数为曾经指定宽度的域设置填充字符的值。为了用星号填充数值列,我们可以将例9-3中的for循环修正如下:第9章 流类库与输入/输出for(int i=0;i4;i+)cout.width(10);cout.fill(*);coutvaluesiendl;其输出结果为*1.44*36.47*625.7*4096.24第9章 流类库与输入/输出 9.4.2 运用控制符 C+的输入/输出流类库提供了一些控制符,可以直接嵌入到输入/输出语句中来实现对I/O格式的控制。它的优点是程序可以直接将控制符插入流中,而不用单独调用。表9-4中列出了常用的I/O流类库控制符。第9章 流类库与输入/输出表9-4 常用的I/O流类库控制符第9章 流类库与输入/输出第9章 流类库与输入/输出【例9-4】运用setw控制符指定宽度。#include#includevoid main()double values=1.44,36.47,625.7,4096.24;char*names=Rose,John,Alice,Mary;for(int i=0;i4;i+)第9章 流类库与输入/输出 coutsetw(6)namesisetw(10)valuesiendl;width成员函数在头文件iostream.h中阐明。假设带参量运用setw(n)或任何其它控制符,还必需包括头文件iomanip.h。在输出中,字符串输出在宽度为6的域中,整数输出在宽度为10的域中。程序运转结果为 Rose 1.44 John 36.47 Alice 625.7 Mary 4096.24第9章 流类库与输入/输出 setw和width都不截断数值。假设一个数值需求比set(n)确定的字符数更多的字符,那么该值将运用它所需求的一切字符。当然,还要遵守该流的精度设置。setw和width仅影响紧随其后的域,即使用setw和width设置的间隔方式并不保管其效能。在一个域输出完后,域宽度恢复成它的默许值(必要的宽度),但其它流格式选项坚持有效直到发生改动。第9章 流类库与输入/输出例如,下面的程序代码:/.cout setiosflags(ios:right)/设置为默许的右对齐方式,setw(5)1setw(5)2setw(5)3endl;cout setiosflags(ios:left)/设置成左对齐方式 第9章 流类库与输入/输出 setw(5)1 setw(5)2 setw(5)3endl;coutresetiosflags(ios:left)/封锁左对齐标志 /.这段程序代码中,是经过运用带参数的setiosflags控制符来设置左、右对齐,参数是ios:left和ios:right枚举器。第9章 流类库与输入/输出 该枚举器定义在ios类中,因此,援用时必需包括ios:前缀。这里需求用resctiosflags支配符封锁左、右对齐标志。setiosflags不同于width和setw,它的影响是耐久的,直到用resetiosflags重新恢复默许值时为止。这段程序代码的输出结果为 1 2 3 1 2 3 常用控制符和流格式控制成员函数如表9-5所示。第9章 流类库与输入/输出表9-5 常用控制符和流成员函数 第9章 流类库与输入/输出9.5 输入输入/输出成员函数输出成员函数 9.5.1 运用成员函数输入 1getline()函数 在程序运用cin输入时,cin用空白符和行终了符将各个值分开。有时候输入能够需求读取一整行文本并且分开不同的域,为此,我们可以运用getline成员函数。其函数原型如下:istream&getline(char*pch,int nCount,char delim=n);第9章 流类库与输入/输出 其中,第一个参数是字符数组,用于放置读取的文本;第二个参数是本次读取的最大字符个数;第三个参数是分隔字符,作为读取一行终了的标志。getline成员函数的功能是允许从输入流中读取多个字符(包括空白字符和行终了符),并且允许指定输入终止字符(默许值是换行字符)。在读取完成后,从读取的内容中删除该终止字符。第9章 流类库与输入/输出 【例9-5】为输入流指定一个终止字符。本程序延续读入一串字符,直到遇到字符t时停顿,字符个数最多不超越99个。程序中的t是大小写敏感的。#include void main()char line100;coutType a line terminated by tendl;cin.getline(line,100,t);coutlineendl;第9章 流类库与输入/输出 2get()函数 在输入时,有些时候需求执行每次只输入单个字符的操作,我们可以运用get()成员函数来完成。get()函数的格式如下:char istream:get();【例9-6】循环读入字符,直到键入一个y字符,或遇到文件尾。#include void main()char letter;while(!cin.eof()第9章 流类库与输入/输出letter=cin.get();if(letter=y)coutybe met!;break;coutletter;第9章 流类库与输入/输出 get()函数还有一种方式可以输入一系列字符,直到输入流中出现终了符或所读字符个数已到达要求读的字符个数。这时,get()函数的函数原型如下:istream&istream:get(char*,int n,char delim=n);第9章 流类库与输入/输出 例如,下面程序输入一系列字符,将前24个字符输出。#include void main()char line25;cout;cin.get(line,25);cout line;第9章 流类库与输入/输出 9.5.2 运用成员函数输出 【例9-7】运用put()成员函数,在屏幕上显示字母表中的字母。#include void main()char letter;for(letter=A;letter=Z;letter+)cout.put(letter);第9章 流类库与输入/输出程序运转结果为ABCDEFGHIJKMNOPQRSTUVWXYZ也可以像下面那样在一条语句中延续调用put()函数:cout.put(A).put(n);该语句在输出字符A后输出一个新换行符。还可以用ASCII码值表达式调用put()函数:cout.put(65);该语句也输出字符A。第9章 流类库与输入/输出9.6 用户自定义类型的输入用户自定义类型的输入/输出输出【例9-8】用户自定义的插入运算符和提取运算符。#include class PhoneNumber private:char nationCode4;char areaCode4;char phoneCode8;第9章 流类库与输入/输出public:friend ostream&operator(istream&,PhoneNumber&);ostream&operator(ostream&output,PhoneNumber&num)output(num.nationCode)num.areaCode-(istream&input,PhoneNumber&num)input.ignore();/跳过 input.getline(num.nationCode,4);input.ignore();/跳过 input.getline(num.areaCode,4);input.ignore();/跳过-input.getline(num.phoneCode,8);return input;第9章 流类库与输入/输出void main()PhoneNumber phone;coutEnter a telephone number in thephone;coutThe phone number entered was:nphonephone1phone2;第9章 流类库与输入/输出 插入运算符的两个参数是对ostream对象的援用和对自定义类型本例中为PhoneNumber的对象的援用,前往对ostream对象的援用。在该程序中,重载的插入运算符按输入格式显示类PhoneNumber的对象。该运算符函数将号码各部分显示为字符串,由于它们是以字符串格式存储的类istream中的成员函数getline在终了输入后存储一个空字符。第9章 流类库与输入/输出 重载的运算符函数在类PhoneNumber中被声明为友元函数。为了可以访问类中非公有成员,重载的输入和输出运算符必需被声明为类的友元。C+允许为用户自定义类型添加新的输入/输出才干,而无需修正类ostream或istream中的声明和私有数据成员。这大大提高了C+的可扩展性。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!