ImageVerifierCode 换一换
格式:PPT , 页数:45 ,大小:497.50KB ,
资源ID:2170548      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2170548.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第5章 IO流_对象和类入门.ppt)为本站会员(dzzj200808)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第5章 IO流_对象和类入门.ppt

1、I/O流对象和类入门,田秀霞 上海电力学院计信学院,主要内容,流和基本文件I/O 流I/O工具 字符I/O,5.1 流和基本文件I/O,I/O指的是程序的输入(Input)和输出(Output)。 输入可取自键盘,输出可发送至屏幕。 其实,输入也可取自文件,输出可发送至文件。,为什么引入文件I/O,键盘输入和屏幕输出只是和临时数据打交道,一旦程序终止,键盘输入的数据和屏幕上的数据都会消失。 文件则可以永久保存,除非硬盘损坏或病毒破坏等。,5.1.1 流,流是对象,是由一个字符(或其他类型的数据)构成的“流”。对象是一种特殊的变量,它拥有自己的一套特殊用途的函数。 输入流:如果流向程序,则称之为

2、输入流。输入流可以来源于键盘或文件。 cin是连接到键盘的一个输入流. 输出流:如果流向屏幕或文件,则称之为输出流,输出流可来源于程序。 cout是连接到屏幕的一个输出流.,如果in_stream是一个输入流,并且这个流来源于某个文件,那么下面语句什么意思? int number; in_streamnumber;,如果out_stream是一个输出流,并且这个流发送到某个文件,那么下面语句什么意思? int number=100; out_stream“数字为:”number;,5.1.2 文件I/O,读取文件:如果程序从一个文件获取输入,称读取文件。 写入文件:程序将输出发送给文件,称读取

3、文件。 流可以用来从一个文件中获取输入,或将输出发送给文件。 但是在使用流之前必须先声明流,而且必须将流连接到文件。 输入文件流类型名称:ifstream 输出文件流类型名称:ofstream,ifstream in_stream;,ofstream out_stream;,读或写文件第一步,如果要使用ifstream和ofstream类型,则必须引入头文件fstream,即程序中必须包括预编译指令和语句: #include using namespace std;,引入头文件fstream,读或写文件第二步,声明流变量格式: 流类型名称 流变量1,流变量2; 如:ifstream in_st

4、ream;ofstream out_stream;,声明流变量,读文件第三步,输入流变量必须连接到一个文件,称之为打开文件。 需要一个名为open的函数执行这个打开操作。 假设需要输入流in_stream连接到一个名为infile.txt的文件,那么程序必须首先执行如下语句,然后才能从该文件读取输入。 in_stream.open(“infile.txt”);,打开文件,执行该语句后,in_stream表示文件infile.txt,除非重新设置in_stream连接的文件。,读取文件第四步,使用提取运算符从文件中获取输入。 如: int num1,num2;in_streamnum1num2;

5、,读取文件,从文件infile.txt中读取两个数字,并分别放入变量num1和num2中。,读取文件第五步,程序结束从一个文件获取输入,每个文件都应该关闭,即断开文件和输入流的连接,此时要用到另一个名为close的函数。 如 in_stream.close(); 如果程序正常终止,但没有正常关闭文件,系统会自动关闭文件。,关闭文件,#include #include /文件流头文件 using namespace std; void main() ifstream indata; /定义一个输入流变量indata.open(“input_data.txt“); /将文件流变量和磁盘文件联系起来

6、,打开文件int a;double b;indata a b; /从磁盘文件分别读数据到两个变量中cout “a=“ a “, b=“ b endl; /查看结果indata.close(); /关闭文件 ,a=23,b=25.8,写文件第三步,输出流变量必须连接到一个文件,称之为打开文件。 需要一个名为open的函数执行这个打开操作。 假设需要输出流out_stream连接到一个名为outfile.txt的文件,那么程序必须首先执行如下语句,然后才能从该文件读取输入。 out_stream.open(“outfile.txt”);,打开文件,执行该语句后,out_stream表示文件outf

7、ile.txt,除非重新设置out_stream连接的文件。,写文件第四步,使用插入运算符向文件写入数据。 如: int num1=45,num2=8;out_streamnum1num2;,写入文件,向文件outfile.txt中写入两个数字。,写文件第五步,程序结束向一个文件写入数据,每个文件都应该关闭,即断开文件和输出流的连接,此时要用到另一个名为close的函数。 如 out_stream.close(); 如果程序正常终止,但没有正常关闭文件,系统会自动关闭文件。,关闭文件,#include /引入文件流头文件 using namespace std; /=测试主函数= int ma

8、in() ofstream outFile(“ofile.txt“); /声明一个文件输出流对象outFile“hello,Jack“endl; /向文件输出一个字符串outFile“Would you mind do me a favor!“endl; /向文件输出一个字符串outFile.close(); /关闭文件输出流return 0; ,输入输出文件,P148图5.1,5.1.3 类与对象入门,其实cin,cout,in_stream和out_stream都是对象,对象是一个变量,既然是变量则对应一定的变量类型,如下: ostream cout; istream cin; ifstr

9、eam in_stream; ofstream out_stream; 和对象关联的既有函数也有数据,这完全由该对象所属的类决定。 in_stream.open(“infile.txt”); out_stream.open(“outfile.txt”);,与对象关联的函数称作成员函数,不同的对象可能含有不同的成员函数,这些函数可能同名。类决定了对象拥有哪些成员函数。,成员函数,在程序中调用一个成员函数时,必须指定一个对象。 如:in_stream.open(“infile”);.称为圆点运算符,圆点之前命名的对象称作调用对象。,对象名.成员函数,5.1.4 检查文件是否成功打开,如果open函

10、数要打开的文件不存在,或其他原因打开失败,则程序可能不会报告任何错误,正常执行,但是得到的是一个非预期的结果。 最好在执行open函数之后,判断open调用是否成功,如果不成功则终止程序。 可以用成员函数fail()来测试一个操作是否失败。 fail函数的返回类型是bool,即布尔类型。 如:in_stream.fail(); /1或0out_stream.fail();/1或0,fail函数的应用,最好在每个open调用之后,立即调用fail函数。 如: in_stream.open(“infile.txt”);if(in_stream.fail() cout“输入文件打开失败!”endl;

11、exit(1);,必须在程序中包含预编译指令和语句: #include using namespace std;,完善程序5.1,P152-图5.2,5.1.5 检查文件尾,程序要从文件中读取数据,但是不一定知道文件中数据的个数,怎样才能确定是否已经读取到文件尾了呢? 如:编写程序,计算输入文件中数据的平均值。,#include #include #include using namespace std; int main() ifstream in_stream;ofstream out_stream;in_stream.open(“data.txt“);out_stream.open(“o

12、utput.txt“);if(in_stream.fail()cout“文件不存在或目录不正确“endl;exit(1);,int sum=0,count=0; int num; double avg;while(in_streamnum) count+;sum+=num; avg=(double)sum/count; out_streamcount“个整型数据的平均值是:“avgendl;in_stream.close(); out_stream.close();return 0; ,循环从文件中读取数据,直到将文件中有效数据读取完,此时in_strteamnum的结果为NULL使得循环条件

13、为假。,5.2 流I/O工具,输出格式:程序的输出布局。 如:输出2.00 输出*30 采用流的各种格式操作。,格式化输出,5.2.1 流的格式操作,常用的流状态 showpos,showbase,uppercase,showpoint,boolalpha,left,right,dec,hex,oct,fixed,scientific 有参数的三个常用的流状态 width(int),fill(char),precision(int) 与连用的设置方式,要包含头文件iomanip setw(int),setfill(char),setprecision(int),格式化输出,1)常用的流状态,s

14、howpos 在正数(包括0)之前显示+号 showbase在十六进制整数前加0x,八进制整数前加0 uppercase 十六进制格式字母用大写字母表示(默认为小写字母) showpoint浮点输出,即使小数点后都为0也加小数点 boolalpha逻辑值1和0用true和false表示 left左对齐(填充字符填在右边) right右对齐(填充字符填在左边) dec十进制显示整数 hex十六进制显示整数 oct八进制显示整数 fixed定点数格式输出 scientific科学记数法格式输出,#include using namespace std; void main() bool b=23;

15、cout3)3)endl; coutbendl;coutfixed12345.678endl;coutscientific123456.678endl; ,12 +12 +18 12 0x12 0xff 0XFF +123 +123.000 0 0 false +12345.678000 +1.234567E+005,常用的流状态,取消流状态的操作: noshowpos,noshowbase,nouppercase,noshowpoint,noboolalpha Left与right是相对立的,设置了此就取消了彼,dec,oct,hex也是相互独立的。 fixed与scientific和一般显

16、示方式三者相互独立,不过他们的取消方式为cout捆绑函数调用的方式 cout.unsetf(ios:scientific); cout.unsetf(ios:fixed);,取消流状态,#include using namespace std; void main() bool b=23;cout3)3)endl; coutbendl;cout noboolalphabendl;/取消布尔型数的字母输出coutfixed12345.678endl;cout.unsetf(ios:fixed);/取消定点小数cout12345.678endl;coutscientific123456.678en

17、dl; ,12 +12 18 12 0x12 0xff 0XFF 18 123 123.000 123 0 0 false 0 12345.678000 12345.7 1.234567E+005,2)有参数的三个流状态,width(int) 设置显示宽度 fill(char)设置填充字符 precision(int)设置有效位数(普通显示方式)或精度(定点或科学记数法方式) 注意:这些流状态是以cout捆绑调用它们的形式设置的,不能与流出符连用。width(n)为一次性操作,即第二次显示时将不再有效,默认为width(0),表示仅显示数值。,#include using namespace

18、std; void main() cout.width(8);/只对下面一个数据有效cout.fill(*);cout 12 endl; /默认右对齐cout12endl; /默认宽度为0cout.width(8);cout.fill(*);coutleft12endl;cout.precision(8);/当小数为0时,不显示cout 2345.00 endl;cout 1234567.789124567endl;/普通显示coutfixed 1234567.78912endl;/定点显示coutscientific1234567.78912endl;/科学记数显示 ,*12 12 12*

19、2345 1234567.8 1234567.78912000 1.23456779e+006,3)与连用的设置方式,setw(int)(必须在每次使用时都设定) setfill(char) setprecision(int) 注意:必须要包含头文件iomanip 只使用setprecision不能输出小数末尾的0,例如0.2只能输出为0.2,而不是0.20。 可以使用下面语句将setw,setprecision和fixed三个结合起来。coutsetiosflags(ios:fixed); coutfixedsetprecision(2)setw(8)0.2;,#include #inclu

20、de using namespace std; void main() cout setw(8) setfill(*)12endl;cout setw(8) setfill(*)left12endl;cout setprecision(8)1234.00endl;cout1234567.789124567endl;coutsetw(10)fixed setprecision(3)12345.200endl; ,*12 12* 1234 1234567.8 12345.200*,课后练习,将上述所有设置输出格式的程序中的标准输出流cout用一个文件输出流(如:out_stream)替换,观察文件

21、中的输出格式和屏幕格式是否完全相同?,5.2.2 流作为函数实参,流可以作为函数实参。 但是函数对应的形参必须是传引用调用的。 P163图5.6,5.3 字符I/O,所有字符都作为字符数据输入和输出。 如:输出10,实际上输出的是两个字符1和0。 不管程序如何实现,计算机硬件读取的始终是字符1和0。 C+为字符数据的输入输出提供了一些低级的辅助机制,这些机制不支持自动转换。,5.3.1 get成员函数,使用格式: 输入流变量.get(char类型的一个变量)。 输入流可以是cin或文件输入流 含义: get函数允许读取输入的一个字符,并将其存储到char类型的一个变量中。 成员函数get不会忽

22、略空白字符,除非通过编写代码丢弃空白字符。,/* * getfuc.cpp * 分别将字符ABCD输入四个字符变量中 */ #include using namespace std; int main() char ch1,ch2,ch3,ch4;cin.get(ch1);cin.get(ch2);cin.get(ch3);cin.get(ch4);cout“ch1=“ch1endl;cout“ch2=“ch2endl;cout“ch3=“ch3endl;cout“ch4=“ch4endl; ,5.3.2 put成员函数,使用格式: 输出流变量.put(char类型参数)。 输出流可以是cou

23、t或文件输出流 含义: put函数将它的char类型的参数值输出到输出流。,/* * putfuc.cpp * put函数输出一个字符 */ #include #include #include using namespace std; int main() char ch1,ch2;ifstream in_stream;ofstream out_stream;in_stream.open(“infile.txt“);if(in_stream.fail()coutch1ch2;out_stream.open(“outfile.txt“);out_streamch1endl;out_stream

24、ch2endl;return 0; ,5.3.3 eof成员函数,使用格式: 输入流变量.eof() 函数返回类型是bool值,即true或false 含义: 确定什么时候读取完文件所有内容,即到文件尾。,int next,count=0,sum=0; double avg; in_streamnext; while(!in_stream.eof() count+;sum+=next;in_streamnext; avg=(double)sum/count; out_stream.open(“newavg.txt“); out_streamcount“个数据的算术平均值是:“avgendl;,小结,掌握: 流 文件输入流 文件输出流 类 对象 get、put、eof成员函数,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报