IO流对象和类入门.ppt_第1页
IO流对象和类入门.ppt_第2页
IO流对象和类入门.ppt_第3页
IO流对象和类入门.ppt_第4页
IO流对象和类入门.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I/O流对象和类入门,田秀霞上海电力学院计信学院,主要内容,流和基本文件I/O流I/O工具字符I/O,5.1流和基本文件I/O,I/O指的是程序的输入(Input)和输出(Output)。输入可取自键盘,输出可发送至屏幕。其实,输入也可取自文件,输出可发送至文件。,为什么引入文件I/O,键盘输入和屏幕输出只是和临时数据打交道,一旦程序终止,键盘输入的数据和屏幕上的数据都会消失。文件则可以永久保存,除非硬盘损坏或病毒破坏等。,5.1.1流,流是对象,是由一个字符(或其他类型的数据)构成的“流”。对象是一种特殊的变量,它拥有自己的一套特殊用途的函数。输入流:如果流向程序,则称之为输入流。输入流可以来源于键盘或文件。cin是连接到键盘的一个输入流.输出流:如果流向屏幕或文件,则称之为输出流,输出流可来源于程序。cout是连接到屏幕的一个输出流.,如果in_stream是一个输入流,并且这个流来源于某个文件,那么下面语句什么意思?intnumber;in_streamnumber;,如果out_stream是一个输出流,并且这个流发送到某个文件,那么下面语句什么意思?intnumber=100;out_stream“数字为:”从文件中获取输入。如:intnum1,num2;in_streamnum1num2;,读取文件,从文件infile.txt中读取两个数字,并分别放入变量num1和num2中。,读取文件第五步,程序结束从一个文件获取输入,每个文件都应该关闭,即断开文件和输入流的连接,此时要用到另一个名为close的函数。如in_stream.close();如果程序正常终止,但没有正常关闭文件,系统会自动关闭文件。,关闭文件,#include#include/文件流头文件usingnamespacestd;voidmain()ifstreamindata;/定义一个输入流变量indata.open(input_data.txt);/将文件流变量和磁盘文件联系起来,打开文件inta;doubleb;indataab;/从磁盘文件分别读数据到两个变量中couta=a,b=bendl;/查看结果indata.close();/关闭文件,a=23,b=25.8,写文件第三步,输出流变量必须连接到一个文件,称之为打开文件。需要一个名为open的函数执行这个打开操作。假设需要输出流out_stream连接到一个名为outfile.txt的文件,那么程序必须首先执行如下语句,然后才能从该文件读取输入。out_stream.open(“outfile.txt”);,打开文件,执行该语句后,out_stream表示文件outfile.txt,除非重新设置out_stream连接的文件。,写文件第四步,使用插入运算符向文件写入数据。如:intnum1=45,num2=8;out_streamnum1num2;,写入文件,向文件outfile.txt中写入两个数字。,写文件第五步,程序结束向一个文件写入数据,每个文件都应该关闭,即断开文件和输出流的连接,此时要用到另一个名为close的函数。如out_stream.close();如果程序正常终止,但没有正常关闭文件,系统会自动关闭文件。,关闭文件,#include/引入文件流头文件usingnamespacestd;/=测试主函数=intmain()ofstreamoutFile(ofile.txt);/声明一个文件输出流对象outFilehello,Jackendl;/向文件输出一个字符串outFileWouldyouminddomeafavor!endl;/向文件输出一个字符串outFile.close();/关闭文件输出流return0;,输入输出文件,P148图5.1,5.1.3类与对象入门,其实cin,cout,in_stream和out_stream都是对象,对象是一个变量,既然是变量则对应一定的变量类型,如下:ostreamcout;istreamcin;ifstreamin_stream;ofstreamout_stream;和对象关联的既有函数也有数据,这完全由该对象所属的类决定。in_stream.open(“infile.txt”);out_stream.open(“outfile.txt”);,与对象关联的函数称作成员函数,不同的对象可能含有不同的成员函数,这些函数可能同名。类决定了对象拥有哪些成员函数。,成员函数,在程序中调用一个成员函数时,必须指定一个对象。如:in_stream.open(“infile”);.称为圆点运算符,圆点之前命名的对象称作调用对象。,对象名.成员函数,5.1.4检查文件是否成功打开,如果open函数要打开的文件不存在,或其他原因打开失败,则程序可能不会报告任何错误,正常执行,但是得到的是一个非预期的结果。最好在执行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;exit(1);,必须在程序中包含预编译指令和语句:#includeusingnamespacestd;,完善程序5.1,P152-图5.2,5.1.5检查文件尾,程序要从文件中读取数据,但是不一定知道文件中数据的个数,怎样才能确定是否已经读取到文件尾了呢?如:编写程序,计算输入文件中数据的平均值。,#include#include#includeusingnamespacestd;intmain()ifstreamin_stream;ofstreamout_stream;in_stream.open(data.txt);out_stream.open(output.txt);if(in_stream.fail()cout文件不存在或目录不正确num)count+;sum+=num;avg=(double)sum/count;out_streamcount个整型数据的平均值是:avgnum的结果为NULL使得循环条件为假。,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)与3;cout3)3)endl;coutbendl;coutfixed12345.678endl;coutscientific123456.6783;cout3)3)endl;coutbendl;coutnoboolalphabendl;/取消布尔型数的字母输出coutfixed12345.678endl;cout.unsetf(ios:fixed);/取消定点小数cout12345.678endl;coutscientific123456.678endl;,12+1218120 x120 xff0XFF18123123.00012300false012345.67800012345.71.234567E+005,2)有参数的三个流状态,width(int)设置显示宽度fill(char)设置填充字符precision(int)设置有效位数(普通显示方式)或精度(定点或科学记数法方式)注意:这些流状态是以cout捆绑调用它们的形式设置的,不能与流出符连用。width(n)为一次性操作,即第二次显示时将不再有效,默认为width(0),表示仅显示数值。,#includeusingnamespacestd;voidmain()cout.width(8);/只对下面一个数据有效cout.fill(*);cout12endl;/默认右对齐cout12endl;/默认宽度为0cout.width(8);cout.fill(*);coutleft12endl;cout.precision(8);/当小数为0时,不显示cout2345.00endl;cout1234567.789124567endl;/普通显示coutfixed1234567.78912endl;/定点显示coutscientific1234567.78912endl;/科学记数显示,*121212*23451234567.81234567.789120001.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#includeusingnamespacestd;voidmain()coutsetw(8)setfill(*)12endl;coutsetw(8)setfill(*)left12endl;coutsetprecision(8)1234.00endl;cout1234567.789124567endl;coutsetw(10)fixedsetprecision(3)12345.200endl;,*1212*12341234567.812345.200*,课后练习,将上述所有设置输出格式的程序中的标准输出流cout用一个文件输出流(如:out_stream)替换,观察文件中的输出格式和屏幕格式是否完全相同?,5.2.2流作为函数实参,流可以作为函数实参。但是函数对应的形参必须是传引用调用的。P163图5.6,5.3字符I/O,所有字符都作为字符数据输入和输出。如:输出10,实际上输出的是两个字符1和0。不管程序如何实现,计算机硬件读取的始终是字符1和0。C+为字符数据的输入输出提供了一些低级的辅助机制,这些机制不支持自动转换。,5.3.1get成员函数,使用格式:输入流变量.get(char类型的一个变量)。输入流可以是cin或文件输入流含义:get函数允许读取输入的一个字符,并将其存储到char类型的一个变量中。成员函数get不会忽略空白字符,除非通过编写代码丢弃空白字符。,/*getfuc.cpp*分别将字符ABCD输入四个字符变量中*/#includeusingnamespacestd;intmain()charch1,ch2,ch3,ch4;cin.get(ch1);cin.get(ch2);cin.get(ch3);cin.get(ch4);coutch1=ch1endl;coutch2=ch2endl;coutch3=ch3endl;cout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论