




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 I/O流流面向对象程序设计-第7章2本章主要内容本章主要内容n流的概念流的概念 n非格式化输入非格式化输入/输出输出 n格式化输入格式化输入/输出输出n文件的输入文件的输入/输出输出面向对象程序设计-第7章3 在在C+中,将数据从一个对象到另一个对象中,将数据从一个对象到另一个对象的流动抽象为的流动抽象为“流流”。流动的方向不同,。流动的方向不同,构成输入构成输入/输出流,即输出流,即I/O流。流。 在在C+程序中,数据可以从键盘流入到程序,程序中,数据可以从键盘流入到程序,也可以从程序流向屏幕或磁盘文件。也可以从程序流向屏幕或磁盘文件。 从流中获取数据的操作称为从流中获取数据的操
2、作称为提取操作。提取操作。 向流中添加数据的操作称为向流中添加数据的操作称为插入操作插入操作。 数据的输入数据的输入/输出就是通过输出就是通过I/O流来实现的。流来实现的。面向对象程序设计-第7章4C+编译系统提供的编译系统提供的I/O流库含有两个平行流库含有两个平行基类:基类:streambuf和和ios,所有的流类都是由,所有的流类都是由它们派生出来的。它们派生出来的。ios类有类有4个直接派生类,即输入流类个直接派生类,即输入流类istream、输出流类输出流类ostream、文件流类、文件流类fstreambase、串流类串流类strstreambase,这,这4种流作为流库中种流作为
3、流库中的基本流类。的基本流类。 面向对象程序设计-第7章5标准标准I/O流预定义了流预定义了4个流类对象:个流类对象:cin,cout,cerr,clog。cin:istream流类的一个对象,处理标准输入流类的一个对象,处理标准输入cout,cerr,clog:ostream流类的对象。流类的对象。cout处理标准输处理标准输出,出,cerr和和clog处理标准出错信息。处理标准出错信息。不同在于不同在于:cerr的输出不带缓冲,因而发送给它的任何内容都的输出不带缓冲,因而发送给它的任何内容都立即输出;立即输出; clog的输出带缓冲的输出带缓冲,只有当缓冲区满时才输出,也可只有当缓冲区满时
4、才输出,也可以通过刷新流的方式强迫刷新缓冲区。以通过刷新流的方式强迫刷新缓冲区。面向对象程序设计-第7章6面向对象程序设计-第7章77.2非格式化输入非格式化输入/输出输出 非格式化输入非格式化输入/输出就是按系统预定义的格式进行的输出就是按系统预定义的格式进行的输入输入/输出。输出。按默认约定,每个按默认约定,每个C+程序都能使用标准程序都能使用标准I/O流,如流,如标准输入、标准输出。标准输入、标准输出。qcin用来处理标准输入,即键盘输入;用来处理标准输入,即键盘输入;qcout用来处理标准输出,即屏幕输出。它们被定用来处理标准输出,即屏幕输出。它们被定义在义在iostream.h头文件
5、中。头文件中。q在使用在使用cout和和cin前,要用编译预处理命令将所前,要用编译预处理命令将所使用的头文件包含到源程序中,其格式如下:使用的头文件包含到源程序中,其格式如下: #include iostream.h#include 面向对象程序设计-第7章8非格式化输出非格式化输出 “”是预定义的插入运算符,作用在流类对象是预定义的插入运算符,作用在流类对象cout上,上,实现默认格式的屏幕输出。使用实现默认格式的屏幕输出。使用cout输出表达式值到输出表达式值到屏幕上的格式如下:屏幕上的格式如下:coutE1E2”是预定义的提取运算符,作用在流类对象是预定义的提取运算符,作用在流类对象c
6、in上,实现默上,实现默认格式的键盘输入。使用认格式的键盘输入。使用cin将数据输入到变量的格式如下:将数据输入到变量的格式如下:cinV1V2Vn; 其中,其中,V1、V2、Vn都是变量都是变量。功能是暂停执行程序,等。功能是暂停执行程序,等待用户从键盘输入数据,各数据间用待用户从键盘输入数据,各数据间用空格或空格或Tab键分隔键分隔,输入,输入数据类型要与接受变量类型数据类型要与接受变量类型一致一致,输完后,按回车键结束。,输完后,按回车键结束。 cin是是istream流类的对象,它在流类的对象,它在iostream.h头文件中作为全局头文件中作为全局对象定义:对象定义:istream
7、cin(stdin); 其中,其中,stdin表示标准输入设备名(键盘)。表示标准输入设备名(键盘)。面向对象程序设计-第7章107.3 格式化输入格式化输入/输出输出 nC+提供了两种进行输入提供了两种进行输入/输出格式化的方输出格式化的方法:法:q一种是用一种是用ios类类成员函数成员函数进行格式化。进行格式化。q另一种是用专门的另一种是用专门的操作符函数操作符函数进行格式化。进行格式化。面向对象程序设计-第7章11 7.3.1用用ios类成员函数格式化类成员函数格式化 ios类成员函数主要是通过对类成员函数主要是通过对状态标志、输状态标志、输出宽度、填充字符以及输出精度出宽度、填充字符以
8、及输出精度的操作来的操作来完成输入完成输入/输出格式化。输出格式化。枚举量定义在枚举量定义在ios类中,因此引用时必须包类中,因此引用时必须包含含ios:前缀前缀。使用时应该全部用符号名,。使用时应该全部用符号名,绝不要用数值。绝不要用数值。面向对象程序设计-第7章121.用用ios成员函数对状态标志进行操作成员函数对状态标志进行操作 ios类有类有3个成员函数可以对状态标志进行操作,并且定义了一个个成员函数可以对状态标志进行操作,并且定义了一个long型数据成员记录当前状态标志。这些状态标志可用位或运算型数据成员记录当前状态标志。这些状态标志可用位或运算符符“|”进行组合。进行组合。 设置状
9、态标志设置状态标志 用用 setf函数设置状态标志,函数设置状态标志, 其一般格式如下:其一般格式如下: long ios:setf(long flags) 清除状态标志清除状态标志 用用unsetf函数清除状态标志,其一般格式如下:函数清除状态标志,其一般格式如下: long ios:unsetf(long flags) 取状态标志取状态标志 用函数用函数flags取状态标志有两种形式,其格式分别如下:取状态标志有两种形式,其格式分别如下: long ios: flags() long ios:flags(long flag)面向对象程序设计-第7章13调用的一般格式:调用的一般格式:.(i
10、os:)例例7-1 示例设置状态标志。示例设置状态标志。/example71.cpp#include void main() cout.setf(ios:showpos); /设置在正数前加上正号设置在正数前加上正号“+” cout.setf(ios:scientific); /设置按科学记数法输出设置按科学记数法输出 cout123 123.23endl;运行结果:运行结果:+123 +1.232300e+002面向对象程序设计-第7章14例例7-2示例对状态标志的操作。示例对状态标志的操作。/example72.cpp#include void showflags(long f);void
11、 main() long f; f=cout.flags(); /取当前状态标志取当前状态标志 showflags(f); /显示状态值显示状态值 cout.setf(ios:showpos|ios:scientific|ios:fixed); /追加状态标志追加状态标志 f=cout.flags(); /取当前状态标志取当前状态标志 showflags(f); /显示状态值显示状态值 面向对象程序设计-第7章15 cout.unsetf(ios:scientific); /从状态标志中去掉从状态标志中去掉 scientific f=cout.flags(); /取当前状态标志取当前状态标志
12、showflags(f); /显示状态值显示状态值 f=cout.flags(ios:hex); /重新设置状态标志重新设置状态标志 showflags(f); f=cout.flags(); /取当前状态标志取当前状态标志 showflags(f); void showflags(long f) long i; for(i=0 x8000;i;i=i1) /用用右移方式右移方式使使i中的值为中的值为“1”的位不断右移的位不断右移 if(i&f)cout1; /判断判断f中的某一位是否为中的某一位是否为“1” else cout0; coutendl;运行结果:运行结果:0000000
13、0000000000001110000000000000101000000000000010100000000000000000001000000面向对象程序设计-第7章162.用用ios成员函数设置输出宽度成员函数设置输出宽度 设置输出宽度函数有两种形式,其格式分别设置输出宽度函数有两种形式,其格式分别如下:如下: int ios:width(int len) int ios:width() 第一种形式是设置输出宽度,并返回原来的第一种形式是设置输出宽度,并返回原来的输出宽度;第二种形式是返回当前输出宽度,输出宽度;第二种形式是返回当前输出宽度,输出宽度为输出宽度为0。面向对象程序设计-第7
14、章17#include void main() double values = 1.23,35.36,653.7,4358.24; for(int i=0;i4;i+) cout.width(10); cout valuesi n; 运行结果:运行结果: 1.23 35.36 653.7 4358.24面向对象程序设计-第7章183.设置填充字符设置填充字符 填充字符的作用是当输出值不满输出宽度时用填充字填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为符来填充,默认填充字符为空格空格。它与。它与width()函数函数配合使用,否则没有意义。配合使用,否则没有意义。 设置填
15、充字符函数有两种形式,其格式分别如下:设置填充字符函数有两种形式,其格式分别如下: char ios:fill(char ch) char ios:fill() 第一种形式是重新设置填充字符,并返回设置前的填第一种形式是重新设置填充字符,并返回设置前的填充字符;第二种形式是返回当前的填充字符充字符;第二种形式是返回当前的填充字符。面向对象程序设计-第7章19#include void main() double values = 1.23,35.36,653.7,4358.24; for(int i=0;i4;i+) cout.width(10); cout.fill(*); cout val
16、uesi n; 运行结果:运行结果:*1.23*35.36*653.7*4358.24面向对象程序设计-第7章204.设置输出精度设置输出精度 设置浮点数输出精度有两种形式,其格式分别设置浮点数输出精度有两种形式,其格式分别如下:如下: int ios:precision(int p) int ios:precision() 第一种形式是重新设置输出精度,并返回设置第一种形式是重新设置输出精度,并返回设置前的输出精度;第二种形式是返回当前的输出前的输出精度;第二种形式是返回当前的输出精度。精度。面向对象程序设计-第7章21例例7-3 示例设置输出宽度、填充字符、输出精度。示例设置输出宽度、填充
17、字符、输出精度。/example73.cpp#include void main() int i;i=cout.width();coutwidth:iendl;cout.width(8);coutcout.width()(new width)endl;面向对象程序设计-第7章22 char c; c=cout.fill(); coutfilling word is:c( ASCII code(int)c)endl; cout.fill(*); coutcout.fill()(int)cout.fill()(new filling word)endl; int j; j=cout.precisi
18、on(); coutpresicion:jendl; cout.precision(8); cout123.456789(example)endl; coutcout.precision()(new presicion)”或插入运算符或插入运算符“”后后面来设定输入面来设定输入/输出格式输出格式,即在读写对象之间插入一,即在读写对象之间插入一个修改状态的操作。个修改状态的操作。 其中有些函数没有参数,所以又叫其中有些函数没有参数,所以又叫操作符操作符。 面向对象程序设计-第7章26 设置输入设置输入/输出宽度函数输出宽度函数setw(int) 设置输出填充字符函数设置输出填充字符函数setfi
19、ll(int) 设置输出精度函数设置输出精度函数setprecision(int) 设置输入设置输入/输出整型数数制函数输出整型数数制函数dec、hex和和oct 取消输入结束符函数取消输入结束符函数ws 控制换行操作符控制换行操作符endl 代表输出单字符代表输出单字符“0”的操作符的操作符ends面向对象程序设计-第7章271.设置输入设置输入/输出宽度函数输出宽度函数setw(int) 相当于相当于C语言的标准语言的标准I/O函数(函数(scanf和和printf)中的)中的“%”和格式符的作用。在使用时,只对其后一项输入和格式符的作用。在使用时,只对其后一项输入/输出有效。输出有效。
20、对于对于输出输出时,若实际宽度小于设置宽度时,数据时,若实际宽度小于设置宽度时,数据向向右对齐右对齐,反之则按数据的实际宽度输出。,反之则按数据的实际宽度输出。 对于对于输入输入时,若输入的数据宽度超过设置宽度时,时,若输入的数据宽度超过设置宽度时,超出的数据部分超出的数据部分被截断而被作为下一项输入内容被截断而被作为下一项输入内容。面向对象程序设计-第7章28例例7-4-1 示例设置输入示例设置输入/输出宽度。输出宽度。/example74.cpp#include #include void main() char *p=12345,*q=678; char f4,g4; /最后一位为最后一
21、位为0 int i=10; coutpsetw(6)qsetw(4)pqsetw(4)fg; /设置输入宽度设置输入宽度 coutfendlgendli:iendl; 运行结果:运行结果:12345 678123456781234512345i:10面向对象程序设计-第7章292 设置输出填充字符函数设置输出填充字符函数setfill(int) 此函数与此函数与ios:fill相同,常与相同,常与setw(int)联合使用,从联合使用,从而向不满设置输出宽度的空间填入指定的字符,不而向不满设置输出宽度的空间填入指定的字符,不设置则填空格。设置后直至下一次设置前一直有效。设置则填空格。设置后直至
22、下一次设置前一直有效。面向对象程序设计-第7章30例例7-4-2 示例设置输入示例设置输入/输出宽度。输出宽度。/example74.cpp#include #include void main() char *p=12345,*q=678; char f4,g4; /最后一位为最后一位为0 int i=10;/设置输出宽度和填充字符设置输出宽度和填充字符coutpsetfill(*)setw(6)qsetw(4)pqsetw(4)fg; /设置输入宽度设置输入宽度 coutfendlgendli:iendl; 运行结果:运行结果:12345*678123456781234512345i:10
23、面向对象程序设计-第7章313设置输出精度函数设置输出精度函数setprecision(int)setiosflag(ios:fixed)使用定点方式表示实数。使用定点方式表示实数。setiosflag(ios:scientific)是用科学计数法表示实数。是用科学计数法表示实数。setiosflag(ios:fixed)与与setprecision(n)合用,可以控制小合用,可以控制小数点右边的数字个数。数点右边的数字个数。setiosflag(ios: scientific)与与setprecision(n)合用,可以控制合用,可以控制科学计数法的小数位数。科学计数法的小数位数。面向对象程
24、序设计-第7章32例例7-5 示例分别用浮点、定点和科学记数法的方式表示一个实数。示例分别用浮点、定点和科学记数法的方式表示一个实数。/example75.cpp#include #include void main() double f=22.0/7; /在用浮点表示的输出中,在用浮点表示的输出中,setprecision(n)表示有效位数表示有效位数 coutfendl; /默认有效位数为默认有效位数为6 coutsetprecision(0)fendl; /最小的有效位数为最小的有效位数为1/在用定点表示的输出中,在用定点表示的输出中,setprecision(n)表示小数位数表示小数位
25、数 coutsetiosflags(ios:fixed); coutsetprecision(8)fendl; /小数位数为小数位数为8运行结果:运行结果:3.1428633.14285714面向对象程序设计-第7章334 设置输入设置输入/输出整型数数制函数输出整型数数制函数dec、hex和和oct相当于相当于printf函数中用的函数中用的“%d”, “%x”, “%o”,相同。,相同。默默认数值为认数值为dec。在输入时,若输入违例,则强制输入一个在输入时,若输入违例,则强制输入一个0给变量给变量例例7-6 示例违例输入。示例违例输入。/example76.cpp /说明:说明:若输入十
26、六进制数,则显示若输入十六进制数,则显示0 0。 #include void main()int i;cini;coutiendl;面向对象程序设计-第7章34例例7-7 示例设置输出整型数数制。示例设置输出整型数数制。/example77.cpp#include void main() int number=1001; coutDecimal:decnumberendl Hexadecimal:hexnumberendl Octal:octnumberendl;运行结果:运行结果:Decimal:1001Hexadecimal:3e9Octal:1751面向对象程序设计-第7章35例例7-8
27、在上例中增加一个头文件,对十六进制数进行大写控制。在上例中增加一个头文件,对十六进制数进行大写控制。/example78.cpp#include#includevoid main() int number=1001; coutHexadecimal:hex setiosflags(ios:uppercase) numberendl; 运行结果:运行结果:Hexadecimal:3E9面向对象程序设计-第7章36例例7-9 示例设置输入示例设置输入/输出整型数数制。输出整型数数制。/example79.cpp#include void main() int i,j; long k; char c
28、,str40,*s=str; cinihexkcjs; coutiendlhexkendlcendljendlsendl;面向对象程序设计-第7章375 取消输入结束符函数取消输入结束符函数ws 此函数表示可以省去输入时用作代表一个非数值输入项结束此函数表示可以省去输入时用作代表一个非数值输入项结束的空格或的空格或Tab键。键。例例7-10 示例示例ws的使用。的使用。/example710.cpp#include void main()char c,d;int i,j;cinwscdij;coutcdi,jendl;面向对象程序设计-第7章386.用户自定义操作符函数用户自定义操作符函数输出
29、:输出:ostream& manip_name(ostream& stream) return stream;面向对象程序设计-第7章39例例7-11 示例用户自定义输出操作符函数。示例用户自定义输出操作符函数。/example711.cpp#include #include ostream& setup(ostream& stream) stream.setf(ios:left); streamsetw(10)setfill($); return stream;void main() cout10 setup10endl;运行结果:运行结果:10 10$面向对
30、象程序设计-第7章40输入:输入:istream& manip_name(istream& stream) return stream;面向对象程序设计-第7章41例例7-12 示例用户自定义输入操作符函数。示例用户自定义输入操作符函数。/example712.cpp#include #include istream& prompt(istream& stream) cinhex; coutprompti; coutiendl;运行结果:运行结果:Enter number using hex format:ab171面向对象程序设计-第7章42 C+有三种文件流
31、类:有三种文件流类: 输入输入/输出文件流类输出文件流类fstream 输入文件流类输入文件流类ifstream 输出文件流类输出文件流类ofstream 它们分别从它们分别从I/O流中的流中的iostream、istream、ostream流类中派生而来。流类中派生而来。 这些文件流类都定义在这些文件流类都定义在fstream.h头文件中,因此,头文件中,因此,要使用文件流类,必须在程序开始包含该头文件。要使用文件流类,必须在程序开始包含该头文件。7.4文件的输入文件的输入/输出输出面向对象程序设计-第7章43C+中进行文件操作的一般步骤中进行文件操作的一般步骤 为文件定义一个流类对象;为文件定义一个流类对象; 使用使用open()函数建立(或打开)文件。如果文函数建立(或打开)文件。如果文件不存在,则建立该文件;如果磁盘上已存在件不存在,则建立该文件;如果磁盘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法律服务在电商平台的知识产权保护策略考核试卷
- 拍卖行品牌影响力考核试卷
- 风险评估与企业决策之间的联系-试题及答案
- 2024年预算员团队效率提升策略试题及答案
- 跨界创意营销案例解析试题及答案
- 注会考试准备经验分享及答案
- 公司总经理工作述职报告
- 初中家长会教师发言稿
- 餐饮行业互动仪式传播和品牌资产的关系研究
- SARS-CoV-2原始株和奥密克戎BA.1株在小鼠模型中的致病特征比较
- 秸秆破壁菌酶研发项目可行性研究报告(范文参考)
- 2025新疆机场(集团)有限责任公司阿克苏管理分公司第一季度招聘(75人)笔试参考题库附带答案详解
- 全国计算机等级考试《三级信息安全技术》专用教材【考纲分析+考点精讲+真题演练】
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 小学数学主题活动设计一年级《欢乐购物街》
- 体外循环意外时麻醉医生该做些什么?
- (完整word版)男衬衫的制作工艺
- 家和万事兴-善人道
- 信用社(银行)清产核资实施方案
- 幼儿园大班语言活动《熟能生巧》优质课公开课教案比赛讲课获奖教案
- 九族五服表(九族五服图)
评论
0/150
提交评论