c++输入输出流及文件操作详解ppt课件.ppt_第1页
c++输入输出流及文件操作详解ppt课件.ppt_第2页
c++输入输出流及文件操作详解ppt课件.ppt_第3页
c++输入输出流及文件操作详解ppt课件.ppt_第4页
c++输入输出流及文件操作详解ppt课件.ppt_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

第7章输入输出流,7.1流类和流对象,7.2标准IO流和流对象,7.3格式控制,7.4文件处理,本章内容-第一讲,1、输入输出流的含义流类与流对象2、标准输入输出流标准IO流对象IO流成员函数-get(),getline()与-put(),put,get(),getline(),read(),write(),第7章输入输出流,流(stream)表示信息从源到目的端的流动,负责建立数据生产者和消费者之间的联系,数据按顺序从一个对象传送到另一对象。,C+中把数据之间的传输操作称作”流”,I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。程序中,对数据的输入/输出是以字节流实现的应用程序对字节序列作出各种数据解释.C+的输入输出流是指由若干字节组成的字节序列流中的内容可以是ASCII字符、图形图像、数字音频视频等形式的信息。,7.1IO流,7.1IO流,I/O流类库提供对象之间的数据交互服务输出流Outputstream:数据从内存传送到某个载体或设备中;输入流Inputstream:数据从某个载体或设备传送到内存中;,_内存_,输入数据,输出数据,7.1.1缓冲区,缓冲区buffer是内存中的一个临时存储区,用来匹配不同部件数据传输率的差异。通过使用缓冲的方式可以更高效地处理输入输出,信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地。,在C+中输入输出流被定义为类,I/O库中的类称为流类,编译系统提供了用于输入输出的iostream类库。流类中的常用类的继承层次关系,7.1.2流类,(1)标准流提供通用输入输出操作,作为其他I/O流基类系统指定的标准设备的I/O操作。(2)文件流以外存中的文件为对象进行输入和输出。以文件为对象的输入输出,包括从磁盘文件输入数据,或将数据输出到磁盘文件。(3)字符串流对内存中指定空间进行输入和输出。通常指定一个字符数组作为存储空间。,7.1.2流类,iostream.h包含操作所有输入/输出流所需的基本信息istream.h,ostream.hiomanip.h包含格式化I/O操纵算子,用于指定数据输入输出的格式fstream.h处理文件信息,包括建立文件,读/写文件的各种操作接口每一种C+版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能,7.1.2头文件,I/O流类库预定义了一批流对象,连接常用的外部设备.程序员可以定义所需的I/O流对象,使用流库提供的工作方式实现数据传输。流类对象可以建立和删除,可从流中获取数据和向流添加数据。,7.1.3流对象,istreamcin,ostreamcout,输入流对象,_内存_,输出流对象,7.2标准流对象及常用成员函数,标准流对象是在std命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。声明在头文件iostream,7.2.1标准输出流,coutostream类的对象(consoleoutput)通常连向显示器,可以重定向(关联至文件)在输出流类中重载的一组公用成员函数,实现安全便捷的输出基本数据类型,输出自定义类型对象需要单独重载ostreamcouta;,6.3.4重载流插入和流提取运算符,ostream,使用重载版本访问对象coutaarr1arr2;,cin的别名,istream类的公有成员函数,7.2.4输入流操作,intistream:get();/charc=cin.get();istreamget.cpp,istream类的公有成员函数,7.2.4输入流操作,istream其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。读取完成后,从流中删除该终止符。Get_getline.cpp,7.2.4输入流操作,/字符串的输入charch120,ch220,ch320,ch420;cinch1;coutch1endl;cin.get(ch2,10);coutch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,.);coutch4endl;,istream,istream类的公有成员函数,7.2.4输入流操作,7.2.5流错误状态,所有流都把流的状态存储在状态字中不同标志位中存储不同的错误状态位包含在类ios的enum成员中,ios处理流错误状态的公有成员函数,7.2.4流错误状态,运行程序,观测结果grade.cppstreamstate.cpp,ios提供直接设置标志字的控制格式函数iostream和iomanip库还提供控制符简化I/O格式化操作(自学内容),7.3格式控制,ios类格式化标志,格式化标志是类定义的枚举集合,用来指定输入输出格式化和操作的不同选择。该枚举类型定义:enumskipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio;引用格式化标志:ios:格式化标志,7.3.1设置标志字,状态标志值含义输入/输出skipws0X0001跳过输入中的空白Ileft0X0002左对齐输出Oright0X0004右对齐输出Ointernal0X0008在符号位和基指示符后填入字符Odec0X0010转换基制为十进制I/Ooct0X0020转换基制为八进制I/Ohex0X0040转换基制为十六进制I/Oshowbase0X0080在输出中显示基指示符Oshowpoint0X0100输出时显示小数点Ouppercase0X0200十六进制输出时一律用大写字母Oshowpos0X0400正整数前加“+”号Oscientific0X0800科学示数法显示浮点数Ofixed0X1000定点形式显示浮点数Ounitbuf0X2000输出操作后立即刷新流Ostdio0X4000输出操作后刷新stdout和stdreeO,ios的标志常量,7.3.1设置标志字,ios控制格式的函数,/例4设置输出宽度#includevoidmain()char*s=Hello;cout.fill(*);/置填充符cout.width(10);/置输出宽度cout.setf(ios:left);/左对齐coutsendl;cout.width(15);/置输出宽度cout.setf(ios:right,ios:left);/清除左对齐标志位,置右对齐coutsb;coutc;coutOutputindecimal:n;cout.setf(ios:dec,ios:basefield);couta=ab=bc=cendl;cout.setf(ios:hex,ios:basefield);coutOutputinhexadecimal:n;couta=ab=bc=cendl;cout.setf(ios:oct,ios:basefield);coutOutputinoctal:n;couta=ab=bc=cendl;,/置八进制输出,/置十六进制输出,/置十进制输出,/置八进制输入,/置十进制输入,/置十六进制输入,例5不同基数形式的输入输出,#includevoidmain()doublex=22.0/7;inti;coutoutputinfixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示+for(i=1;i=5;i+)cout.precision(i);coutxendl;coutoutputinscientific:n;/清除原有设置,科学示数法输出cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);coutx*1e5deca;,cinhexb;,cinoctc;,coutocta=ab=bc=cendl;,couta=ab=bc=cendl;,couthexa=ab=bc=cendl;,7.3.2格式控制符,iomanip的控制符,常用控制符与成员函数,/例8整数的格式化输出#include#includeusingnamespacestd;voidmain()constintk=618;coutsetw(10)setfill(#)setiosflags(ios:right)kendl;coutsetw(10)setbase(8)setfill(*)resetiosflags(ios:right)setiosflags(ios:left)kendl;,#includevoidmain()doublex=22.0/7;inti;coutoutputinfixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示+for(i=1;i=5;i+)cout.precision(i);coutxendl;coutoutputinscientific:n;/清除原有设置,科学示数法输出cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);coutx*1e5endl;,例9格式化输出浮点数,coutsetiosflags(ios:fixed|ios:showpos);,coutresetiosflags(ios:fixed|ios:showpos)setiosflags(ios:scientific);,coutsetprecision(i)xendl;,coutsetprecision(i)x*1e5ab;,10.5.3文本文件,a0X00f3,b0X004e,7.4.1文件和流,输入文件流对象,文件,写文件,10.5.3文本文件,a0X00f3,b0X004e,7.4.1文件和流,文件,intc;c=a+b;foutc=c,get(),getline(),read(),fileObj.close();,7.4.2打开和关闭文件,打开文件建立文件流对象;流对象与磁盘文件关联;指定文件的打开方式关闭文件解除流对象与磁盘文件关联,1.打开文件,方法1调用流类带参数的构造函数,建立流对象时连接外部文件流类对象名(文件名,方式);egifstreaminfile(datafile.dat,ios:in);ofstreamoutfile(d:newfile.dat,ios:out);,ifstream、ofstream或fstream,1.打开文件,方法2先建立流对象,再调用fstream:open()函数连接外部文件流类对象名;对象名.open(文件名,方式);,ifstream、ofstream或fstream,打开(创建)一个文件newfile.dat,准备写:ofstreamoutfile;/建立输出文件流对象outfile.open(d:newfile.dat,ios:out);,打开一个已有文件datafile.dat,准备读:ifstreaminfile;/建立输入文件流对象infile.open(“datafile.dat”,ios:in);,open函数原型,voidopen(constchar*,intmode,int=filebuf:openprot);,1.打开文件,参数分别表示:文件名,文件的打开方式,文件的访问方式,egifstreaminfile(datafile.dat,ios:in);ofstreamoutfile(d:newfile.dat,ios:out);fstreamrwfile(myfile.dat,ios:in|ios:out);ofstreamofile(a:binary,ios:binary|ios:app);,用或运算符“|”连接两个表示打开方式的标识常量,1.打开文件,打开一个二进制文件进行追加操作,2.关闭文件,关闭文件操作包括把缓冲区数据完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接当一个流对象的生存期结束,系统也会自动关闭文件;若流对象的生存期没有结束,用close()关闭文件后,该流对象可以重用,eg:ofstreamofile;/创建输出文件流ofile.open(myfile1);/ofile流与文件“myfile1”相关联/访问文件“myfile1”ofile.close();/关闭文件“myfile1”ofile.open(“myfile2”);/重用对象ofile,等价于使用构造函数:ofstreamofile(myfile1);,2.关闭文件,close()函数关闭文件但流对象仍然存在,3打开与关闭错误,if(!outfile)/outfile.open(“myfile2.dat”)cerr”ereor:unabletoopenfile2!”;,检测文件是否成功打开,可在条件表达式中使用取反操作符(!)测试流状态,为了测试成功关闭文件,可以调用fail()函数,如,myfile2.close();if(myfile2.fail()cerr,get(),read(),OUTPUT,完成文件读写向文本文件中写入数据,并从文件中读出数据file1.cpp练习:改写程序,将新的数据追加写入文件中file2.cpp使用get(),put()完成文件读写练习:将已有文件的内容复制到新的文件中file3.cpp,#include#includevoidmain()ofstreamout(“test);if(!out)coutcannotopenfile.;return;out10123.45;outfchstr1str2;couti“”f“”chn;coutstr1str2fchstr1str2;couti“”f“”chn;coutstr1str2endl;in.close();,inti10,floatf123.45,charchT,charstr1his,charstr2is,ostreamcout,ifstreamin,例从文件读出数据file1.cpp,#include#includevoidmain()ifstreamf1(test);if(!f1)coutcannotopentestforinput.;return;ofstreamf2(testnew);if(!f2)coutcannotopentestnewforouput.;return;charch;while(f1.get(ch)f2.put(ch);f1.close();f2.close();coutnumber;/读入一个整数,指针后移4字节input.seekg(pos);/指针返回原来位置inputnumber;/重读该整数,i-1ii+1,10.5.4二进制文件,200311,7.4.4二进制文件,istream类操作流读指针的成员函数,ostream返回写指针当前所指位置值,ostream类操作流写指针的成员函数,10.5.4二进制文件,7.4.4二进制文件,文件读写练习binaryFile多条学生的记录包括学号、姓名和成绩等信息:(1)输入多个学生记录(2)按二进制方式写到文件中:(3)从文件中读出成绩并求平均值;(4)对文件中按成绩排序再写回文件中.(5)查找一条学生记录,修改其中的属性.,模拟一个书店的销售账目能够添加、删除书目,根据进货和销售数目更新库存数。账目结构:包含书号(TP)、书名(bookName)和库存量(blance)。功能菜单:选择14分别调用函数Append(入库)、Sale(销售)、Inquire(查询)和CreateTxt(建立文本),选择0退出系统。,案例:简单事务处理应用程序,main函数打开文件booksFile.dat,通过流类参数,把流对象iof传递给各函数。文件流的读/写指针在字节流中移动,实现读/写操作。为建立格式化文本文件,用文本流的写方式打开booksFile.txt。文本流对象ftxt把从二进制文件读出的记录格式化地写入文本文件。BookSystem,简单事务处理应用程序,小组项目开发1图书馆管理系统定义类及其关系:Book,Reader,Manager,Date等2.管理员拥有对图书信息的录入,查询,修改,增添与删除等权限;3.读者拥有查询图书和借阅历史的功能;4.用文件记录图书和用户信息;,小组项目开发2试卷自动测验系统系统教师发布试题和标准答案,实现自动批阅试卷、成绩登

温馨提示

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

评论

0/150

提交评论