C程序设计语言揣锦华流类库与输入输出.pptx

上传人:莉*** 文档编号:87145233 上传时间:2023-04-16 格式:PPTX 页数:61 大小:702.56KB
返回 下载 相关 举报
C程序设计语言揣锦华流类库与输入输出.pptx_第1页
第1页 / 共61页
C程序设计语言揣锦华流类库与输入输出.pptx_第2页
第2页 / 共61页
点击查看更多>>
资源描述

《C程序设计语言揣锦华流类库与输入输出.pptx》由会员分享,可在线阅读,更多相关《C程序设计语言揣锦华流类库与输入输出.pptx(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 所谓流,是指数据从一个对象流向另一个对象。在C+程序中,数据可以从键盘流入到程序中,也可以从程序中流向屏幕或磁盘文件,把数据的流动抽象为“流”。流在使用前要被建立,使用后要被删除,还要使用一些特定的操作从流中获取数据或向流中添加数据。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。第1页/共61页 流实际上就是一个字节序列。在输入操作中,字节从输入设备(如键盘、磁盘、网络连接等)流向内存;在输出操作中,字节从内存流向输出设备(如显示器、打印机、磁盘、网络连接等)。如图9-1所示。在C+语言中,针对流的特点,提供了如图9-2所示的层次结构来描述流的行为,并给出了I/O流类库

2、的操作。第2页/共61页第3页/共61页图9-2 输入/输出流类层次图 第4页/共61页 表9-1 I/O流类列表 第5页/共61页 9.1.2 输入/输出标准流类 1标准流的设备名 由 表 9-1可 见,I/O流 的 标 准 头 文 件 是 iostream.h。其 中,ostream类通过其派生类ostream_withassign支持以下预先定义的流对象:cout:标准输出。默认设备为屏幕。cerr:标准错误输出。没有缓冲,发送给它的内容立即被输出,默认设备为屏幕。第6页/共61页 clog:标准错误输出。有缓冲,当缓冲区满时被输出,默认设备为打印机。而istream类通过其派生类ist

3、ream_withassign支持预先定义的对象。cin:标准输入。默认设备为键盘。第7页/共61页 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);/.第8页/共61页 如语

4、句:coutHow old are you?;cout是类ostream的对象,(int&n);istream&operator(float&f);istream&operator(char*psz);/.第9页/共61页9.2 文件流类 fstream、ifstream和ofstream是文件流类,在头文件fstream.h中定义。其中,fstream是ofstream和ifstream多重继承的子类。文件流类不是标准设备,没有cout那样预先定义的全局对象。文件流类支持对磁盘文件的操作。要定义一个文件流类对象,须指定文件名和打开方式。第10页/共61页类ofstream用于执行文件输出,该

5、类有以下几个构造函数: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);第11页/共61页类ifstream用于执行文件输入,该类有以下几个构造函数:ifstream:ifstream(filedesc fd);ifstream:ifstream(filedesc fd,char*pch,int nLength);if

6、stream:ifstream(const char*szName,int nMode=ios:in,int nProt=filebuf:openprot);第12页/共61页 其中最常用的都是最后一个构造函数。该函数有三个参数,第一个参数是指向要打开的文件名的字符串,后两个参数指定文件的打开模式。文件打开模式的具体标志见表9-2。可以用按位OR(|)运算符组合这些标志,它们作为枚举器定义在ios类中。第13页/共61页 表9-2 文件打开模式 第14页/共61页 打开一个输出文件,用于在文件尾添加数据 打开一个现存文件(用于输入或输出)并查找到结尾 打开一个输入文件。对于一个ofstream

7、文件,使用ios:in作为一个openmode,可避免删除一个现存文件中现有的内容 打开一个文件,用于输出。对于所有ofstream对象,此模式是隐含指定的 如果一个文件存在,则打开它;否则该操作失败第15页/共61页 如果一个文件不存在,则作为新文件打开它;如果文件已存在,则该操作失败 打开一个文件。如果它已经存在,则删除其中原有的内容。如果指定了ios:out,但没有指定ios:ate、ios:app和ios:in,则隐含为此模式 以二进制模式打开一个文件(默认是文本模式)Nprot是文件保护方式,它的标志如表9-3。第16页/共61页 表9-3 文件保护方式 第17页/共61页【例9-1

8、】向文件myfile中写入一些信息。#includevoid main()ofstream fc(c:tempmyfile);fcConstructs an ofstream object.nAll ofstream constructors construct a filebuf object.n;第18页/共61页 注意:这里的文件名要说明其路径,要使用双斜杠,因为C+编译器理解单斜杠为字符转换符。在文件打开时,匹配了构造函数ofstream:ofstream(char*),只需要一个文件名,其它为默认。打开方式默认为ios:out|ios:trunc,即该文件用于接受程序的输出。如果该文

9、件已存在,则其内容必须先清除,否则就新建。第19页/共61页如果要检查文件是否打开,则须判断成员函数fail():#include void func()ofstream fc(myfile);if(fc.fail()/fail()=1 cerrerror opening filen;return;fca;coutaendl;输出结果为 H第25页/共61页【例9-2】使用串流输入对字符串中的数据进行解读。#include#includechar*ioString(char*);void main()char*str=100 123.456;char*Buf0=ioString(str);co

10、utBuf0iNumberfNumber;/从串流中读入一个整数和浮点数char*Buf1=new char28;ostrstream outS(Buf1,28);outSiNumber=iNumber,fNumber=fNumberendl;return Buf1;第27页/共61页 程序运行结果为 iNumber=100,fNumber=123.456 分析:在函数ioString()中,以pString为输入设备,先定义一个输入串流对象inS,从中输入一个整数和一个浮点数。再开辟一个字符串空间作为输出设备,定义一个输出串流对象outS,将从输入设备输入的两个变量的值输出。第28页/共61

11、页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+)第29页/共61页cout.width(10);coutvaluesin;程序运行结果为 1.4436.47625.74096.24第30页/共61页 此例子在一列中以至少10个字符宽按右对齐方式输出数据。从程序的输出结果可以看到,在少于10个字符宽的数值前加入了引导空格。空格是默认的填充符,当输出的数据不能充满指定的宽度时,系统会自动以空格填充

12、。另外,还可以使用fill成员函数为已经指定宽度的域设置填充字符的值。为了用星号填充数值列,我们可以将例9-3中的for循环修改如下:第31页/共61页for(int i=0;i4;i+)cout.width(10);cout.fill(*);coutvaluesiendl;其输出结果为*1.44*36.47*625.7*4096.24第32页/共61页 9.4.2 使用控制符 C+的输入/输出流类库提供了一些控制符,可以直接嵌入到输入/输出语句中来实现对I/O格式的控制。它的优点是程序可以直接将控制符插入流中,而不必单独调用。表9-4中列出了常用的I/O流类库控制符。第33页/共61页表9-

13、4 常用的I/O流类库控制符第34页/共61页第35页/共61页【例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+)第36页/共61页 coutsetw(6)namesisetw(10)valuesiendl;width成员函数在头文件iostream.h中说明。如果带参量使用setw(n)或任何其它控制符,还必须包括头文件iomanip.h。在输出中,字符串输出在宽度为6的域

14、中,整数输出在宽度为10的域中。程序运行结果为 Rose 1.44 John 36.47 Alice 625.7 Mary 4096.24第37页/共61页 setw和width都不截断数值。如果一个数值需要比set(n)确定的字符数更多的字符,则该值将使用它所需要的所有字符。当然,还要遵守该流的精度设置。setw和width仅影响紧随其后的域,即使用setw和width设置的间隔方式并不保留其效力。在一个域输出完后,域宽度恢复成它的默认值(必要的宽度),但其它流格式选项保持有效直到发生改变。第38页/共61页例如,下面的程序代码:/.cout setiosflags(ios:right)/设

15、置为默认的右对齐方式,setw(5)1setw(5)2setw(5)3endl;cout setiosflags(ios:left)/设置成左对齐方式 第39页/共61页 setw(5)1 setw(5)2 setw(5)3endl;coutresetiosflags(ios:left)/关闭左对齐标志 /.这段程序代码中,是通过使用带参数的setiosflags控制符来设置左、右对齐,参数是ios:left和ios:right枚举器。第40页/共61页 该枚举器定义在ios类中,因此,引用时必须包括ios:前缀。这里需 要 用 resctiosflags操 纵 符 关 闭 左、右 对 齐 标

16、 志。setiosflags不 同 于width和setw,它的影响是持久的,直到用resetiosflags重新恢复默认值时为止。这段程序代码的输出结果为 1 2 3 1 2 3 常用控制符和流格式控制成员函数如表9-5所示。第41页/共61页表9-5 常用控制符和流成员函数 第42页/共61页9.5 输入/输出成员函数 9.5.1 使用成员函数输入 1getline()函数 在程序使用cin输入时,cin用空白符和行结束符将各个值分开。有时候输入可能需要读取一整行文本并且分开不同的域,为此,我们可以使用getline成员函数。其函数原型如下:istream&getline(char*pch

17、,int nCount,char delim=n);第43页/共61页 其中,第一个参数是字符数组,用于放置读取的文本;第二个参数是本次读取的最大字符个数;第三个参数是分隔字符,作为读取一行结束的标志。getline成员函数的功能是允许从输入流中读取多个字符(包括空白字符和行结束符),并且允许指定输入终止字符(默认值是换行字符)。在读取完成后,从读取的内容中删除该终止字符。第44页/共61页 【例9-5】为输入流指定一个终止字符。本程序连续读入一串字符,直到遇到字符t时停止,字符个数最多不超过99个。程序中的t是大小写敏感的。#include void main()char line100;c

18、outType a line terminated by tendl;cin.getline(line,100,t);coutlineendl;第45页/共61页 2get()函数 在输入时,有些时候需要执行每次只输入单个字符的操作,我们可以使用get()成员函数来完成。get()函数的格式如下:char istream:get();【例9-6】循环读入字符,直到键入一个y字符,或遇到文件尾。#include void main()char letter;while(!cin.eof()第46页/共61页letter=cin.get();if(letter=y)coutybe met!;bre

19、ak;coutletter;第47页/共61页 get()函数还有一种形式可以输入一系列字符,直到输入流中出现结束符或所读字符个数已达到要求读的字符个数。这时,get()函数的函数原型如下:istream&istream:get(char*,int n,char delim=n);第48页/共61页 例如,下面程序输入一系列字符,将前24个字符输出。#include void main()char line25;cout;cin.get(line,25);cout line;第49页/共61页 9.5.2 使用成员函数输出 【例9-7】使用put()成员函数,在屏幕上显示字母表中的字母。#in

20、clude void main()char letter;for(letter=A;letter=Z;letter+)cout.put(letter);第50页/共61页程序运行结果为ABCDEFGHIJKMNOPQRSTUVWXYZ也可以像下面那样在一条语句中连续调用put()函数:cout.put(A).put(n);该语句在输出字符A后输出一个新换行符。还可以用ASCII码值表达式调用put()函数:cout.put(65);该语句也输出字符A。第51页/共61页9.6 用户自定义类型的输入/输出【例9-8】用户自定义的插入运算符和提取运算符。#include class PhoneNu

21、mber private:char nationCode4;char areaCode4;char phoneCode8;第52页/共61页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.ignor

22、e();/跳过)input.getline(num.areaCode,4);input.ignore();/跳过-input.getline(num.phoneCode,8);return input;第54页/共61页void main()PhoneNumber phone;coutEnter a telephone number in thephone;coutThe phone number entered was:nphonephone1phone2;第58页/共61页 插入运算符的两个参数是对ostream对象的引用和对自定义类型(本例中为PhoneNumber)的对象的引用,返回对ostream对象的引用。在该程序中,重载的插入运算符按输入格式显示类PhoneNumber的对象。该运算符函数将电话号码各部分显示为字符串,因为它们是以字符串格式存储的(类istream中的成员函数getline在结束输入后存储一个空字符)。第59页/共61页 重载的运算符函数在类PhoneNumber中被声明为友元函数。为了能够访问类中非公有成员,重载的输入和输出运算符必须被声明为类的友元。C+允许为用户自定义类型增加新的输入/输出能力,而无需修改类ostream或istream中的声明和私有数据成员。这大大提高了C+的可扩展性。第60页/共61页感谢您的欣赏!第61页/共61页

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

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁