合工大计算机学院程序设计10第十章C的输入输出.ppt

上传人:za****8 文档编号:14279351 上传时间:2020-07-15 格式:PPT 页数:21 大小:389.32KB
收藏 版权申诉 举报 下载
合工大计算机学院程序设计10第十章C的输入输出.ppt_第1页
第1页 / 共21页
合工大计算机学院程序设计10第十章C的输入输出.ppt_第2页
第2页 / 共21页
合工大计算机学院程序设计10第十章C的输入输出.ppt_第3页
第3页 / 共21页
资源描述:

《合工大计算机学院程序设计10第十章C的输入输出.ppt》由会员分享,可在线阅读,更多相关《合工大计算机学院程序设计10第十章C的输入输出.ppt(21页珍藏版)》请在装配图网上搜索。

1、第十章 C+的输入输出,流 文件 文件流的使用:文件的输入和输出,10.1 流与文件一、流,C+语言提供了流用于读写文件。 接收输出数据的地方称为目标,发出输入数据的地方称为源。输入输出操作可以看作是字符序列在源、目标与对象之间的流动,因而将完成输入输出操作的类称为流类。 源流目标流 输入缓冲区(读) 输出缓冲区(写) 流的提取运算符 流的插入运算符,二、文件,一个文件必须有一个由用户命名的唯一名字,可用于存储程序和数据。 C+语言将文件看作是一个字符的序列,即由一个个字节的数据顺序组成流式文件 根据文件中数据的组织形式,文件分为: 文本文件:每一个字节存放的是一个ASCII码,表示一个字符,

2、以字符为单位存储文件。 二进制文件:可以是任何类型的文件,以二进制位bit为单位存储文件。,10.2 文件的输入和输出,读写文件的过程: 往流中插入一个字符; 从流中提取一个字符; 一旦建立一个流,把它与文件相关联打开一个文件流,以便用来读和写。使用完后,需要关闭该文件流。,一、文件的打开和关闭1. C+的三种文件流,输入文件流:类 ifstream 输出文件流:类 ofstream 输入/输出文件流:类 fstream 三种文件流都位于 库 fstream。 例:#include void main( )/ 建立不同的文件流 ifstream in; /input file stream只能

3、读 ofstream out; /output file stream只能写 fstream both; / I/O file stream ,2. 文件的打开与关闭方法一:使用函数open,一旦建立一个流,将它与文件相关联的一种方法是使用函数 open( ); ofstreamofile;/ 创建一个输出文件流 ofile.open( “text.txt” ) ; / 打开文件text.txt,使ofile流与该文件相关联 / 写文件text.txt ofile.close( ); / 关闭text.txt文件 ofile.open( “other.txt” ) ; /使ofile流与另一文

4、件other.txt相关联:重用流 / 写文件other.txt ofile.close( ); / 关闭other.txt文件,方法二:通过流类的构造函数在创建流时直接与某文件相关联,ofstream ofile ( “text.txt” ); / 创建一个输出文件流ofile / 打开文件text.txt,使ofile流与该文件相关联 / 写文件text.txt ofile.close( ); / 关闭text.txt文件 流类的构造函数的参数和缺省值与open函数相同,用于在创建一个流时就使它与某个文件相关联,3. open函数的原型,P308open()的函数原型为: void ope

5、n(const char* filename, int mode, int prot = filebuf:openprot); filename:文件名字,可含路径 mode:文件的打开模式 prot:文件的访问方式:普通、只读、隐藏、系统文件,与os相关,一般使用缺省值,文件打开模式mode,ios类中定义了模式的枚举类型open_mode p397 ifstream类中,open()的mode参数缺省值是ios:in ofstream类中,open()的mode参数缺省值是ios:out 缺省方式下,文件以文本方式打开,mode参数用位或运算|组合枚举常量 ofstreamofile; o

6、file.open( “test.bak”, ios:out|ios:binary ) ; / 以二进制形式打开当前目录下的test.bak文件,准备进行写操作 打开失败:重载!运算符 if ( ! ofile ) 警告打开文件失败; 退出程序; 继续正常的文件操作;,二、文件的读写,文本文件的读操作是从流中取一个字符 流的提取运算符 文本文件的写操作是向流中写一个字符 流的插入运算符,例1:将文件file_from拷贝到文件file_to中去,#include #include int CopyFile( char *file_from, char *file_to) / file_from

7、: 输入文件名(源文件);file_to: 输出文件名(目标文件) char ch; /文件不存在则打开失败 ifstream from(file_from,ios:in|ios:nocreate);/以文本方式打开 if (!from) coutCannot open file_from for input!n; return 0 ;/ 返回0表示复制文件不成功 ofstream to(file_to);/ 文件不存在则创建新文件 if (!to) coutCannot open file_to for output!n; return 0 ; /从流from中读一个字符到ch中,成功的话则

8、写入to,否则文 /件的每个字符都读完了 while (from.get(ch) to.put(ch); from.close();to.close();/ 关闭文件 return 1; / 返回1表示文件复制成功 ,例2:把一个整数、一个浮点数和一个字符串写到名为out.txt的文本文件中,#include int main( ) ofstream outfile; outfile.open(out.txt); if (!outfile) coutCannot open out.txt for output!n; return 0 ;/ 返回0表示打开文件不成功 float f = 123.

9、23;int n = 10; outfile n f n; outfileThis is a text file; outfile.close(); return 1; ,程序执行后,在当前目录下生成文件out.Txt,文件内容如下: 10 123.230003 This is a text file,例3:从例2程序建立的文件中读入相关数据,#include #include int main( ) ifstream infile; infile.open(out.txt); if (!infile) cout n f ch str; cout n f ch n; cout str ; in

10、file.close(); return 1; ,输出结果: 10 123.230003 T his,缺省情况下,运算符号跳过空白符号(如空格,回车),然后读入对应于输入对象类型的字符,例4:百钱买百鸡,#include #include void main() int i,j,k; char a28; ofstream ofile(d:myfile.txt);/打开文件 ofile 公鸡 母鸡 小鸡endl; for(i=0;i=20;i+) for(j=0;j=33;j+) k=100-i-j; if(5*i+3*j+k/3=100),ifstream ifile(d:myfile.txt

11、); i=0; while(ifile.get(ai)/不可用,它不能读白字符 if(ai=n) break; i+; / 把文件中的第一行(到n)内容读入a字符数组 ai=0; / a加上结束符,成为完整的字符串 coutijk;/由文件读入 if(ifile.eof()!=0) break; coutsetw(6)isetw(10)jsetw(10)kendl;/屏幕显示 ifile.close(); ,myfile.txt,公鸡 母鸡 小鸡 0 25 75 4 18 78 8 11 81 12 4 84,例5,#include /包含 #include #include class in

12、ventory / 产品目录 char Description20; char No10; int Quantity; double Cost; double Retail; /零售价 public: inventory(char* =#,char* =0,int =0,double =0,double =0); void display(); Bdatatofile(ofstream,inventory:inventory(char *des,char *no,int quan,double cost,double ret) strcpy(Description,des); strcpy(N

13、o,no); Quantity=quan; Cost=cost; Retail=ret; void inventory:display() cout.setf(ios:left); coutsetw(20)Descriptionsetw(10)No; cout.unsetf(ios:left);/要改为右对齐,先清左对齐 cout.setf(ios:right); coutsetw(10)Quantitysetw(10)Costsetw(10)Retailendl; ,inventory:Bdatatofile(ofstream /由此可见读和写是完全对称的过程,次序决不能错,void mai

14、n() inventory car1(夏利2000,805637928,156,80000,105000),car2; inventory motor1(金城125,93612575,302,10000,13000),motor2; ofstream ddatafile(d:Ex9_10.data,ios:out|ios:binary); car1.Bdatatofile(ddatafile); motor1.Bdatatofile(ddatafile); cout对象car1:endl;car1.display(); cout对象motor1:endl;motor1.display(); c

15、out对象car2:endl;car2.display(); cout对象motor2:endl;motor2.display(); ddatafile.close(); ifstream sdatafile(d:Ex9_10.data,ios:in|ios:binary);/重新打开文件,从头读取数据 car2.Bdatafromfile(sdatafile);/从文件读取数据拷贝到对象car2 if(sdatafile.eof()=0) cout读文件成功endl; cout对象car2:endl;car2.display(); motor2.Bdatafromfile(sdatafile);/继续从文件读取数据拷贝到对象motor2 if (sdatafile.eof()=0) cout读文件成功endl; cout对象motor2:endl;motor2.display(); sdatafile.close(); ,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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