输入输出流.ppt

上传人:sccc 文档编号:5377241 上传时间:2023-07-01 格式:PPT 页数:146 大小:1.29MB
返回 下载 相关 举报
输入输出流.ppt_第1页
第1页 / 共146页
输入输出流.ppt_第2页
第2页 / 共146页
输入输出流.ppt_第3页
第3页 / 共146页
输入输出流.ppt_第4页
第4页 / 共146页
输入输出流.ppt_第5页
第5页 / 共146页
点击查看更多>>
资源描述

《输入输出流.ppt》由会员分享,可在线阅读,更多相关《输入输出流.ppt(146页珍藏版)》请在三一办公上搜索。

1、第10章 输入/输出流,I/O(输入/输出)流类库提供对象之间的数据交互服务 流类库预定义了一批流对象,连接常用的外部输入/输出设备 用户可以定义所需的I/O流对象,使用流库提供的一些功能,实现数据传输,流类库,流类库(stream library)是用继承方法建立的输入输出类库 流类库具有两个平行的基类:streambuf 和 ios 类,所有流类库均以两者之一作为基类 streambuf 类提供对缓冲区的低级操作设置缓冲区,对缓冲区指针进行操作向缓冲区存/取字符 ios 类及其派生类提供用户使用流类的接口,支持对streambuf 的缓冲区输入/输出的格式化或非格式化转换,streambu

2、f,1.streambuf,对缓冲区的低级操作,streambuf,1.streambuf,对缓冲区的低级操作,文件缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,字符串缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,标准I/O缓冲区管理,2.ios,提供用户接口,ios,iostream,2.ios,提供用户接口,ios,iostream,输入流,输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入

3、文件流,输入串流,输出串流,输出文件流,输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出

4、串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,11.5 文件处理,文件是由一系列数据构成的序列。例如,一组计算或处理结果可以构成一个文件。一个班所有学生的档案数据也可以构成一个文件。每个文件的内容都保存在外存储器中,每个文件都有一个名字,这个名字用标识符来表示。把数据存放在外存储器是以文件的方式进行,从外存储器把数据取出来也以文件的方式进行。在C+中,必须使用文件来解决数据的存储问题。,C+语言系统把文件看成无结构的字节流。根据文件中数据的编码方式可以把文件分为文本文件和二进制文件。根据文件中数据的存取方式可以把文件分为顺序文件和随机文件。在C+中,要进行数据的存取需要使用三个类

5、:文件输入流类ifstream、文件输出流类ofstream 和文件输入输出流类fstream。文件输入流类ifstream:提取文件中的数据到内存。文件输出流类ofstream:把内存中的数据插入到文件。文件输入输出流类fstream:上述两种功能都有。,11.5.1 文件和流,文件字节序号,文件结束符,文件长度=n,11.5.1 文件和流,文件指针,11.5.1 文件和流,文件结束,11.5.1 文件和流,文件中字节存放的都是数据的编码,这些编码可以是各种信息的编码。应用程序对字节序列可以作出各种类型数据或其它信息的解释。如果文件中的每一个字节存放的是ASC码,则每个字节表示一个字符。以A

6、SC码方式存放数据的文件称为文本文件。文本文件是一种顺序文件。在文本文件中,需要使用一个表示文件结束的标识常量EOF,它在iostream中定义,值为26(0 x1A)。关闭文件后,该字符被自动添加到文件的尾部。,以二进制代码方式存放数据的文件称为二进制文件。二进制文件是一种随机文件。当把内存中的数据存放到二进制文件时,C+把数据转换成二进制代码写到二进制文件中去。当从二进制文件中取数据时,C+把文件中的字节流解释为各种类型数据读出来存放到内存。,-内存-,ifstream,ofstream,读文件,写文件,11.5.2 打开和关闭文件,文件操作的基本步骤:1.打开文件2.读/写文件3.关闭文

7、件,1.打开文件,包括建立文件流对象;调用open()函数连接外部文件。打开文件有两种方法:(1)首先建立流对象,然后调用open()函数连接外部文件流类 对象名;对象名.open(文件名,方式);,ifstream、ofstream 或 fstream,例如:打开一个已有文件datafile.dat,准备读:ifstream infile;/建立输入文件流对象 infile.open(datafile.dat,ios:in);/连接文件,指定打开方式 打开(创建)一个文件newfile.dat,准备写:ofstream outfile;/建立输出文件流对象 outfile.open(d:ne

8、wfile.dat,ios:out);/连接文件,指定打开方式,(2)调用流类带参数的构造函数,建立流对象的同时连接外部文件流类 对象名(文件名,方式);,ifstream、ofstream 或 fstream,例如:ifstream infile(datafile.dat,ios:in);ofstream outfile(d:newfile.dat,ios:out);fstream rwfile(myfile.dat,ios:in|ios:out);,用或运算符“|”连接两个表示打开方式的标识常量,2.关闭文件,例如:ofstream ofile;/创建输出文件流 ofile.open(my

9、file1,ios:out);/ofile流与文件“myfile1”相关联/访问文件“myfile1”ofile.close();/关闭文件“myfile1”ofile.open(myfile2,ios:out);/重用ofile流,关闭文件操作的作用是把缓冲区数据完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接。关闭文件要使用流类的成员函数close()。当一个流对象的生存期结束,系统也会自动关闭文件。,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,o

10、pen()和 close()函数应用,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,#include int main()ofstream ost

11、;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,#include int main()ofstream ost;ost.open(a:

12、my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,#include int

13、main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,

14、/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,11.5.3 文本文件,把描述某种信息的数据组织成一个整体,这个整体称为一个记录。记录是由一个或若干个数据构成。在把一些相关数据写到文本文件时,可以把这些相关数据组织成一个一个记录写到文本文件中。为了便于标识,每个记录的后面增加一个换行符,作为记录之间的分隔。数据之间可以用空白符、制表符、换行符等来分隔。文本文件可以看成是由若干个记录构成,每个记录占一行,每行后面有一个换行符。,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,0 1 2

15、3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,0 1 2 3 4 5,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cend

16、l;,ofstream fout,c 0X0141,2 4 3 7 8,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,c=,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,

17、b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,endl,n,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X01

18、41,2 4 3 7 8,c=,3 2 1,n,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.3456789

19、0 endl;ost.close();,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)

20、12.34567890 endl;ost.close();,使用格式控制建立的文本文件,建立输出文件流对象,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)set

21、precision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,默认方式打开文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)seti

22、osflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,插入字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosfla

23、gs(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,把整型数转换成字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a

24、 endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,以指定格式插入数据,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setios

25、flags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,#include int main()ofstream out(a:test);if(!out)cout cannot open file.;return;out 10 123.45;out nThis is a short text file.;out.close();,把一个整数、一个浮点数和一个串写到文件 a

26、:test 中,对数值常量做转换,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream

27、 in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,int i,float f,char ch,char str1,char str2,10,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;c

28、out i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,float f,char ch,char str1,char str2,123.45,int i 10,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 st

29、r2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,char ch,char str1,char str2,T,int i 10,float f 123.45,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读

30、出一个整数、一个浮点数、一个字符和两个串,ifstream in,char str1,char str2,his,int i 10,float f 123.45,char ch T,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream

31、 in,char str2,is,int i 10,float f 123.45,char ch T,char str1 his,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,int i 10,float f 123.45,char ch T,

32、char str1 his,char str2 is,ostream cout,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)c

33、out cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testne

34、w for ouput.;return;while(f1,ifstream f1,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ch,ofstream f2,把文件 a:test 复制到文件 a:testn

35、ew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cann

36、ot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout ca

37、nnot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,把文件 a:test 复制到文件 a:test

38、new 中,#includeint main()char str=tNew string;ofstream f2(a:testnew,ios:app);/追加方式 if(!f2)cout cannot open testnew for ouput.;return;f2 str;/插入字符串 f2.close();,在文件 a:testnew 的末尾添加字符串,插入串,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstre

39、am outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileN

40、ame,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr nu

41、mber name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf n

42、umber name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name s

43、core n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name

44、score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf num

45、ber name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name

46、score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!ou

47、tstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,文件名,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.op

48、en(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,学生记录,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outs

49、tuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,输入结束,文件关闭时操作系统把缓冲区数据写入磁盘,读文本文件。在屏幕显示学生记录,以及最高分数、最低分数和平均分数,#include#include using namespace std;int

50、main()char name30,s80;int number,score;int n=0,max,min,total=0;double ave;ifstream instuf(a:student.txt,ios:in);if(!instuf)cerr number name score)cout max)max=score;if(score min)min=score;total+=score;n+;ave=double(total)/n;cout maximal is:max endl minimal is:min endl average is:”ave endl;instuf.clo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号