




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,课件制作:C/C+教材编写组哈尔滨理工大学计算中心,基于计算思维,2,第1章初识C/C+程序设计语言,第5章循环结构程序设计,第6章数组,第7章字符串,第8章指针,总复习,第4章选择结构程序设计,课程概述,第9章函数,第11章类与对象自定义数据类型,第12章继承与多态自定义数据类型,第13章C+输入/输出流类库,第14章异常处理,第15章图形界面编程简介,第10章自定义数据类型,第2章数据类型、运算符与表达式,第3章顺序结构程序设计,第13章C+输入/输出流类库,3,C+输入/输出流类库,第13章,熟悉C+中的的概念掌握建立和使用文件I/O流的方法掌握I/O流中常用的成员函数,4,13.1案例剖析,实例:文件的输入输出,问题的提出从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f1.txt中。再把它从磁盘文件f1.txt中读入程序,将其中的小写字母改为大写字母,再存入磁盘文件f2.txt(只保存字母)。,5,13.1案例剖析,算法及程序设计分析从键盘上输入的一行字符,将其中的字母字符存入磁盘文件f1;定义一个输出文件类对象outfile;从键盘上读入一行字符;将其中的字母字符存入输出文件f1中。从文件f1中读入字母字符,将小写字母改为大写字母,再存入f2。定义一个输入文件类对象infile,使其对应文件f1;定义一个输出文件类对象outfile,使其对应文件f2;将其中的小写字母转换成大写,输出到f2。,6,13.1案例剖析,C+源程序及说明,/ch13_1.cpp#include#include#includeusingnamespacestd;voidsave_to_file()ofstreamoutfile(f1.txt);if(!outfile)cerropenf1.txterror!endl;exit(1);charc80;cout请输入一行字符:;cin.getline(c,80);cout=65,同时送显示器显示,关闭文件f1.txt,save_to_file()函数从键盘读入一行字符,并将其中的字母存入磁盘文件,定义输出文件流对象outfile,以输出方式打开磁盘文件f1.txt,对字符逐个处理,直到遇/0为止,7,13.1案例剖析,C+源程序及说明,voidget_from_file()charch;ifstreaminfile(f1.txt,ios:in);if(!infile)cerropenf1.txterror!endl;exit(1);ofstreamoutfile(f2.txt);if(!outfile)cerropenf2.txterror!endl;exit(1);couta;coutdec:decaendl;couthex:hexaendl;coutoct:setbase(8)aendl;,15,13.2C+输入/输出流概述,例13.1用控制符控制输出格式,char*pt=China;coutsetw(10)ptendl;coutsetfill(*)setw(10)ptendl;doublepi=22.0/7.0;coutsetiosflags(ios:scientific)setprecision(8);coutpi=piendl;coutpi=setprecision(4)piendl;coutpi=setiosflags(ios:fixed)piendl;return0;,16,13.2C+输入/输出流概述,longflags();返回当前标志字longflags(long);设置标志字并返回longsetf(long);设置指定的标志位longunsetf(long);清除指定的标志位longsetf(long,long);设置指定的标志位的值intwidth();返回当前显示数据的域宽intwidth(int);设置当前显示数据域宽并返回原域宽charfill();返回当前填充字符charfill(char);设置填充字符并返回原填充字符intprecision();返回当前浮点数精度intprecision(int);设置浮点数精度并返回原精度,类ios中用于格式控制的公有成员函数,17,/ex13-3.cpp#includeusingnamespacestd;intmain()inta=21;cout.setf(ios:showbase);/显示基数符号(0 x或0)coutdec:aendl;/默认以十进制形式输出acout.unsetf(ios:dec);/终止十进制的格式设置cout.setf(ios:hex);/设置以十六进制输出的状态couthex:aendl;/以十六进制形式输出acout.unsetf(ios:hex);/终止十六进制的格式设置cout.setf(ios:oct);/设置以八进制输出的状态coutoct:aendl;/以八进制形式输出acout.unsetf(ios:oct);/终止八进制的格式设置char*pt=China;/pt指向字符串Chinacout.width(10);/指定域宽为10,13.2C+输入/输出流概述,例13.3用控制成员函数输出数据,18,13.2C+输入/输出流概述,coutptendl;/输出字符串cout.width(10);/指定域宽为10cout.fill(*);/指定空白处以*填充coutptendl;/输出字符串doublepi=22.0/7.0;/输出pi值cout.setf(ios:scientific);/指定用科学记数法输出coutpi=;/输出pi=cout.width(14);/指定域宽为14coutpiendl;/输出pi值cout.unsetf(ios:scientific);/终止科学记数法状态cout.setf(ios:fixed);/指定用定点形式输出cout.width(12);/指定域宽为12cout.setf(ios:showpos);/正数输出+cout.setf(ios:internal);/数符出现在左侧,数据右对齐cout.precision(6);/保留6位小数coutpiendl;/输出pi,注意数符+的位置return0;,例13.3用控制成员函数输出数据,19,13.3文件输出流,文件输出流概念,文件(File)是计算机的基本概念,一般指存储于外部介质上的信息集合。每个文件应有一个包括设备及路径信息的文件名。在C+中文件按存储格式分为两类:文本文件(ASCII文件)和二进制文件。文件流是以外存文件为输入输出对象的数据流。输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。最重要的输出流是ostream、ofstream和ostrstream。ostrstream。其中:ofstream类支持磁盘文件的输出。输出时需要先定义一个ofstream类的对象,通过这个文件流对象将数据从内存输出到磁盘文件。,注意:在程序中使用文件,必须使用包含文件命令:#include,20,13.3文件输出流,定义文件输出流对象,定义文件输出流对象一般可以采用以下形式之一:fstream流对象名;ofstream流对象名;其中:fstream定义的流对象既可以是输入流对象也可以是输出流对象,而ofstream只能定义输出流对象。例如:fstreaminfile,outfile;/定义一个输入流对象infile/和一个输出流对象outfileofstreamoutfile;/定义一个输出流对象outfile,21,13.3文件输出流,在定义流对象的同时指定参数调用文件流的构造函数打开文件,形式如下:fstream(char*name,intmode,intfile_attrb=filebuf:openprot);或者ofstream(char*name,intmode=ios:out,intfile_attrb=filebuf:openprot);第1个参数为文件名字符串(包括路径)。第2个参数为对文件进行的I/O模式(访问模式),其值已在ios中进行了定义,具体含义如下:,定义文件输出流对象,22,13.3文件输出流,ios:in/以输入方式打开ios:out/以输出方式打开ios:ate/打开并定位到文件尾ios:app/用于追加数据打开并定位到文件尾ios:trunc/如文件存在则清除其内容ios:nocreate/如文件不存在,则操作失败即不建立文件ios:noreplace/如文件存在,则操作失败即不覆盖文件ios:binary/二进制文件(缺省时为文本文件)也可以用以上各种方式的组合形式来使用。,定义文件输出流对象,23,13.3文件输出流,第3个参数指定所打开文件的保护方式。该参数与具体的操作系统有关,一般只用它的缺省值filebuf:openprot。,例如:(1)ofstreamoutfile1(myfile1.txt);/创建ofstream类的对象outfile1同时打开文件myfile1(2)fstreamoutfile1(myfile1.txt,ios:out);/创建fstream类的对象outfile1同时打开输出文件myfile1(3)fstreamoutfile1(myfile1.dat,ios:out|ios:binary);/创建fstream类的对象outfile1同时以二进制方式打开输出/文件myfile1.dat1.,定义文件输出流对象,24,13.3文件输出流,调用文件流的成员函数open打开文件open(constchar*fname,intmode);其中第一个参数fname是代表文件名的字符串,第二个参数mode是文件的打开方式,同第一种方式中的mode参数的意义相同。例如:ofstreamoutfile1;outfile1.open(“myfile1.txt”);关闭文件使用成员函数close()来完成,其形式:流对象名.close();例如:outfile1.close();,注意:打开输出文件时,若文件不存在,则建立文件;若文件存在,则删除原文件的内容,使其成为一个空文件。,25,13.3文件输出流,/ex13_4.cpp#include#includeusingnamespacestd;intmain()ofstreamfout(“d:abc.txt”);/建立输出流对象fout并打开d:abc.txtif(fout.fail()/若打开文件失败,则由cerr做错误处理cerrd:abc.txtfilenotopened!endl;return1;for(inti=0;i=10;i+)fouti;/向文件中输出数据fout.close();/关闭fout对应的文件return0;,思考:若将上述例题中的循环语句改成for(inti=0;i10;i+)foutix)/如果操作正常,则将数据输出到屏幕上coutx;coutendl;fin.close();/关闭fin对应的文件abc.txtreturn0;,例13.6将上例中d:abc.txt文件的内容显示在屏幕上,34,13.4文件输入流,输入流的常用成员函数,get函数函数格式:get()函数功能:从输入流中把一个字符写到内存,可以接受空白字符。getline函数函数格式:getline(char*p,intn,charp1);函数功能:由键盘输入n-1个字符形成一个串放入由p指定的地址空间中,p1为结束字符。,注意:getline函数所操作的文件通常为txt文本文件。,35,13.4文件输入流,输入流的常用成员函数,read函数函数格式:read(char*p,longsize);函数功能:从文件中读size个字符,并放到p所指的内存缓冲区。第一个是char指针(指向文件中数据的起始地址),第二个参数指出所读的字节数。当遇到文件结束或者在文本文件中遇到文件结束标记字符时读操作结束。seekg和tellp函数函数格式:seekg(streamoffoff,ios:cur)tellp()函数功能:设置读文件时文件指针的位置。参数off:需要的偏移量;cur:指针当前位置。tellp函数是返回当前文件读指针的位置。,36,13.5I/O操作状态控制函数,good函数函数格式:good();函数功能:I/O流正常(没设置状态标志位)返回非0,否则返回0。最重要的输入流是istream、ifstream和istrstream。其中:ifstream类支持磁盘文件的输入。输入时需要定义一个ifstream类的对象,通过这个文件流对象将数据从磁盘文件输入到内存。eof()函数函数格式:eof();函数功能:到达文件尾(eofbit位被置1)则返回非0,否则返回0。,输入流的常用成员函数,37,13.5I/O操作状态控制函数,fail()函数函数格式:fail();函数功能:状态字的failbit、badbit或hardfail中任一个被置1,返回非0,意味着随后的操作将失败,否则返回0。bad()函数函数格式:bad();函数功能:流状态字的badbit或hardfail位中任一个被置1,则返回非0(严重错误,流被破坏),否则返回0。,输入流的常用成员函数,38,13.5I/O操作状态控制函数,rdstate()函数函数功能:rdstate();函数格式:返回当前I/O操作状态字。clear函数函数格式:clear(intef=0);函数功能:无参调用可将状态字的各位均清为0,带参调用,可将某些状态标志位设置为1。,输入流的常用成员函数,39,13.5I/O操作状态控制函数,ignore函数函数格式:ignore(n,终止字符)函数功能:跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。如:ignore(5,A)/跳过输入流中5个字符,遇A后就不再跳了也可以不带参数或只带一个参数。如:ignore()(n默认值为1,终止字符默认为EOF)相当于ignore(1,EOF)。,输入流的常用成员函数,40,13.6综合案例:用文件存储学生成绩,问题的提出,创建一个名为student的结构体,其中包含学号number,姓名name,三门课成绩score3,平均成绩的结构体信息。要求编两个程序,一个程序实现结构体数组中数据写入文件中,另一个程序实现文件中数据读出并输出到屏幕。,41,本程序的主要功能是对一组数据在文件中的存取。此题目包含如下知识点:结构体、结构体数组、文件流对象、文件的打开关闭、文件的读和写以及文件包含。建立一个头文件ch_13.h,在其中创建一个结构体student;编写程序ch13_2_1.cpp,将学生信息从键盘录入并写入二进制文件student.dat中;编写程序ch13_2_2.cpp,从文件student.dat中读出学生信息并显示到屏幕上。,注意:由于存储的数据是一组数据,并且存在二进制文件中,故这里采用ofstream的write函数和ifstream的read函数来实现,可以避免发生由于字符和字节之间的转换出现的错误。,算法及程序设计分析,13.6综合案例:用文件存储学生成绩,42,42,问题算法流程图,3.4综合案例:简单的学生成绩管理,学生信息录入并写入文件的流程图,学生信息读取并显示的流程图,43,/ch13_2.hstructstudent/定义结构体studentintnumber;/学号charname20;/学生姓名floatscore3;/3门课程成绩floataverage;/平均成绩;,源程序,13.6综合案例:用文件存储学生成绩,定义结构体的头文件,44,/ch13_2_1.cpp#include#include#includeusingnamespacestd;#includech13_2.hintmain()constintN=3;studentstuN;ofstreamtfile(student.dat,ios:out|ios:binary);if(!tfile)cerr打开文件student.dat失败!stui.score0;cinstui.score1stui.score2;stui.average=(stui.score0+stui.score1+stui.score2)/3;tfile.write(char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论