C++大学基础教程第十二章讲解课件

上传人:风*** 文档编号:240744930 上传时间:2024-05-04 格式:PPT 页数:48 大小:197.50KB
返回 下载 相关 举报
C++大学基础教程第十二章讲解课件_第1页
第1页 / 共48页
C++大学基础教程第十二章讲解课件_第2页
第2页 / 共48页
C++大学基础教程第十二章讲解课件_第3页
第3页 / 共48页
点击查看更多>>
资源描述
C+大学基础教程大学基础教程第第1212章章 I/OI/O流及输入输出流及输入输出 北京邮电大学电信工程学院北京邮电大学电信工程学院 计算机技术中心计算机技术中心C+语言没有输入/输出语句,但C+编译系统带有一个面向对象的输入/输出软件包,它就是I/O流类库。软件包有时称为库文件(.lib文件),类库是指用面向对象方法实现的软件包。2024/5/42北京邮电大学电信工程学院计算机技术中心12.1 12.1 流类库流类库概述概述12.2 12.2 输出流输出流12.3 12.3 输入流输入流 12.4 12.4 输入输入/输出流输出流 12.5 12.5 重载插入和提取运算符重载插入和提取运算符第第1212章章 I/OI/O流及输入输出流及输入输出C C语言中读写文件语言中读写文件步骤步骤:n打开文件打开文件n读读/写文件写文件n关闭文件关闭文件例例:写文件写文件#include struct Date int month,date,year;void main()const N=30;short k;struct Date dtN;FILE*pf;fopen(f:date.dat,”wb”);for(k=0;kN;k+)dtk.year=2006;dtk.month=4;dtk.date=k+1;fwrite(dt,sizeof(Date),N,pf);fclose();2024/5/44北京邮电大学电信工程学院计算机技术中心C C语言中读写文件语言中读写文件步骤步骤:n打开文件打开文件n读读/写文件写文件n关闭文件关闭文件例例:读文件读文件#include struct Date int month,date,year;void main()const N=30;short k;struct Date dtN;FILE*pf;fopen(f:date.dat,”rb”);fread(dt,sizeof(Date),N,pf);for(k=0;kN;k+)coutdtk.yeardtk.monthdtk.date插入运算符:插入运算符:12.112.1 流类库概述流类库概述 2024/5/412北京邮电大学电信工程学院计算机技术中心 12.2 12.2 输出流输出流系系统统已已经经定定义义了了标标准准设设备备输输出出流流类类,并并且且已已经经定定义义了了该类的对象:该类的对象:ncout cout 标准输出,缓冲区满时被输出。标准输出,缓冲区满时被输出。ncerr cerr 标标准准错错误误输输出出,没没有有缓缓冲冲,发发送送给给它它的的内内容容立立即即被输出。被输出。nclog clog 类似于类似于cerrcerr,但是有缓冲,缓冲区满时被输出。但是有缓冲,缓冲区满时被输出。程程序序中中只只需需#include include .h,可可以以直直接接使使用用这些对象,从键盘输入,向显示器输出。这些对象,从键盘输入,向显示器输出。12.2.1 12.2.1 设备输出设备输出流流 2024/5/414北京邮电大学电信工程学院计算机技术中心标准输出设备一般指显示器,但可以在操作系统标准输出设备一般指显示器,但可以在操作系统下修改为别的设备,比如,重定向为磁盘文件。下修改为别的设备,比如,重定向为磁盘文件。流流cerrcerr和和clogclog把信息输出到默认错误日志上,该把信息输出到默认错误日志上,该日志通常是指显示器,不能重定向。日志通常是指显示器,不能重定向。12.2.1 12.2.1 设备输出设备输出流流 2024/5/415北京邮电大学电信工程学院计算机技术中心例例12.112.1:将:将4 4个浮点数输出到屏幕显示,每行输出一个浮点数输出到屏幕显示,每行输出一个数,靠右对齐,占个数,靠右对齐,占1010个字符的宽度,不足个字符的宽度,不足1010个字个字符在数的前面用符在数的前面用“*”号填充。号填充。/例例12.112.1:使用成员函数控制输出格式:使用成员函数控制输出格式#include using namespace std;void main()double values=1.23,35.36,653.7,4358.24;for(int i=0;i4;i+)cout.width(10);cout.fill(*);cout valuesi n;使用使用widthwidth函数控制输出宽函数控制输出宽度为度为1010个字符,默认的个字符,默认的按右对齐,不足按右对齐,不足1010个字个字符的前边加空格,如果符的前边加空格,如果不想使用默认的空格填不想使用默认的空格填充符,可以调用充符,可以调用fillfill函函数设置填充字符的值。数设置填充字符的值。2024/5/416北京邮电大学电信工程学院计算机技术中心可以使用操纵符或调用成员函数进行输出格式控制可以使用操纵符或调用成员函数进行输出格式控制,可以根据需要灵活选用。可以根据需要灵活选用。操纵符是在标准头文件操纵符是在标准头文件iomanipiomanip中定义的。中定义的。12.2.1 12.2.1 设备输出设备输出流流 操纵符操纵符成员函数成员函数功能描述功能描述decflags(10)按按1010进制输出进制输出hexflag(16)按按1616进制输出进制输出octflag(8)按按8 8进制输出进制输出setfill(c)fill(c)设置填充字符为设置填充字符为c csetprecision(n)precision(n)显示小数精度为显示小数精度为n n位位width(n)设置输出宽度为设置输出宽度为n n个字符个字符setw(n)只有只有setwsetw()()不是持续性的,使用一次,只负责设置一不是持续性的,使用一次,只负责设置一次输出的宽度,其它操纵符都是持续性的。次输出的宽度,其它操纵符都是持续性的。2024/5/417北京邮电大学电信工程学院计算机技术中心操纵符操纵符成员函数成员函数功能描述功能描述fixedflags(ios:fixed)按十进制表示法显示浮点数按十进制表示法显示浮点数scientificflags(ios:scientific)按科学记数法显示浮点数按科学记数法显示浮点数leftflags(ios:left)左对齐左对齐rightflags(ios:right)右对齐右对齐uppercaseflags(ios:uppercase)16进制数大写输出进制数大写输出lowercaseflags(ios:lowercase)16进制数小写输出进制数小写输出showpointflags(ios:showpoint)总是显示小数点总是显示小数点noshowpointflags(ios:noshowpoint)仅当小数部分不为仅当小数部分不为0时才显示小数点时才显示小数点boolalphaflags(ios:boolalphi)用符号用符号true和和false显示逻辑值显示逻辑值noboolalphaflags(ios:noboolalphi)用用1和和0显示逻辑值显示逻辑值showposflags(ios:showpos)显示正数前有显示正数前有“+”号号noshowposflags(ios:noshowpos)显示正数前没有显示正数前没有“+”号号2024/5/418北京邮电大学电信工程学院计算机技术中心例例12.212.2:输出:输出8 8进制和进制和1616进制数进制数#include#include using namespace std;void main()int num=1000;cout.flags(ios:uppercase);coutDecimal:decnumendl;coutHexadecimal:hexnumendl;coutOctal:octnumendl;把把正正数数10001000按按8 8进进制制、1616进进制制等等输输出出到到屏屏幕幕显显示示,使使用用操操纵纵符符进进行行控控制制。1616进进制制显显示示时时,如如果果遇遇到到A-FA-F,要要求求用用大大写写,调调用用成成员员函函数数进进行控制。行控制。2024/5/419北京邮电大学电信工程学院计算机技术中心例例12.412.4:使用操纵符:使用操纵符showpointshowpoint控制浮点数显示出小数点;使控制浮点数显示出小数点;使用用showposshowpos控制正数显示出控制正数显示出“+”号,默认的是不显示。号,默认的是不显示。/例例12.4:强制显示小数点和符号:强制显示小数点和符号#include#include using namespace std;void main()cout10.0/5endl;coutshowpoint10.0/5endl;cout10 -20endl;coutshowpos10 -20open(“filename.dat”,iosmode);12.2.2 12.2.2 文件输出文件输出流流 2024/5/422北京邮电大学电信工程学院计算机技术中心Ofstream类构造函数原型类构造函数原型ofstream();ofstream(const char*szName,int nMode=ios:out,int nProt=filebuf:openprot);ofstream:openvoid open(const char*szName,int nMode=ios:out,int nProt=filebuf:openprot);文件名文件名共享方式,一般共享方式,一般用缺省值。用缺省值。文件打开方式,表文件打开方式,表12-3ios:in,ios:out,ios:nocreate,ios:binary2024/5/423北京邮电大学电信工程学院计算机技术中心例例12.512.5:把学生信息保存到磁盘文件。学生的信息包:把学生信息保存到磁盘文件。学生的信息包括:学号、姓名、年龄等,是一个结构类型括:学号、姓名、年龄等,是一个结构类型studentstudent,结构变量在定义时就初始化。结构变量在定义时就初始化。#include#include using namespace std;struct student long num;char name20;char sex;int age;stu=20041118,Li Li,F,18;void main()ofstream ofile(student.txt);ofilesetw(8)stu.num setw(20)stu.name setw(3)stu.sex setw(3)stu.ageendl;2024/5/424北京邮电大学电信工程学院计算机技术中心在输出到文件时,同样可以使用操纵符,在输出到文件时,同样可以使用操纵符,或使用与操纵符等价的成员函数进行格或使用与操纵符等价的成员函数进行格式控制。式控制。12.2.2 12.2.2 文件输出文件输出流流 2024/5/425北京邮电大学电信工程学院计算机技术中心文件输出流常用的一些其它的成员函数文件输出流常用的一些其它的成员函数:openopen函数:打开文件函数:打开文件putput函数:把一个字符写到输出流中函数:把一个字符写到输出流中.例例:cout.put(c);writewrite函数:把内存中的一块内容写到一个输出文件函数:把内存中的一块内容写到一个输出文件流中流中.n把内存中的一块内容写到一个输出文件流中,该函数带两把内存中的一块内容写到一个输出文件流中,该函数带两个参数:一个个参数:一个charchar指针(指向内存数据的起始地址)和一指针(指向内存数据的起始地址)和一个所写的字节数。常用于二进制文件的输出。个所写的字节数。常用于二进制文件的输出。closeclose函数:关闭文件函数:关闭文件 12.2.2 12.2.2 文件输出文件输出流流 2024/5/426北京邮电大学电信工程学院计算机技术中心例例12.712.7:把数组中:把数组中1010个整数保存到磁盘文件中。个整数保存到磁盘文件中。其中包含整数其中包含整数1010。/二进制输出文件二进制输出文件#include using namespace std;void main()short a10=82,36,25,79,44,10,51,90,63,28;ofstream ofile(“f:temptest.dat”,ios:binary);ofile.write(char*)a,20);ofile.close;2024/5/427北京邮电大学电信工程学院计算机技术中心 12.3 12.3 输入流输入流 系统已经预先定义了标准设备输入流,并且已经定系统已经预先定义了标准设备输入流,并且已经定义了该类的对象义了该类的对象cincin。一般不需要构造新的设备输。一般不需要构造新的设备输入流对象,只使用预先定义的入流对象,只使用预先定义的cincin对象。对象。从从输输入入流流提提取取时时,也也可可以以使使用用的的操操纵纵符符进进行行输输入入格格式的控制。式的控制。从从输输入入流流提提取取时时,也也可可以以使使用用流流类类定定义义的的函函数数进进行行输入操作。输入操作。12.3.1 12.3.1 标准设备输入标准设备输入流流 2024/5/429北京邮电大学电信工程学院计算机技术中心从输入流提取时,也可以使用流类定义的函数进行输从输入流提取时,也可以使用流类定义的函数进行输入操作。常用的函数有:入操作。常用的函数有:getget函数函数:非格式化非格式化getget函数的功能与提取运算符(函数的功能与提取运算符()很相)很相象,主要的不同点是象,主要的不同点是getget函数在读取数据时包括函数在读取数据时包括空格字符,而提取运算符在默认情况下以空格字空格字符,而提取运算符在默认情况下以空格字符作为分隔符,无法读取。符作为分隔符,无法读取。2024/5/430北京邮电大学电信工程学院计算机技术中心#include using namespace std;void main()char letter;while(!cin.eof()letter=cin.get();letter=toupper(letter);if(letter=Y)cout Y be met.;break;cout letter;例例12.812.8:用:用getget函数循环读取字符,转换成大写函数循环读取字符,转换成大写输出,直到用户键入输出,直到用户键入Y Y时结束。时结束。2024/5/431北京邮电大学电信工程学院计算机技术中心getline函数函数 非格式化非格式化getlinegetline成员函数的功能是允许成员函数的功能是允许从输入流中读取多个字符,并且允许指定输入终从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行符)。在读取完成后,从止字符(默认值是换行符)。在读取完成后,从读取的内容中删除该终止字符。可以读取一个包读取的内容中删除该终止字符。可以读取一个包含空格的文本块,然后再进行分析。含空格的文本块,然后再进行分析。2024/5/432北京邮电大学电信工程学院计算机技术中心例例12.912.9:使用:使用getlinegetline从键盘输入中读取,直到从键盘输入中读取,直到遇到遇到$字符。或者最多读取字符。或者最多读取8080个字符,然后个字符,然后把读取的信息再输出到屏幕显示出来。把读取的信息再输出到屏幕显示出来。/例例12.9:使用输入流的成员函数:使用输入流的成员函数getline()()#include using namespace std;void main()char line80;coutInput a string terminated by$endl;cin.getline(line,80,$);coutlineendl;2024/5/433北京邮电大学电信工程学院计算机技术中心文件输入流类文件输入流类ifstreamifstream,支持从磁盘文件读取。支持从磁盘文件读取。如果需要一个仅用于读取的磁盘文件,可以构如果需要一个仅用于读取的磁盘文件,可以构造一个造一个ifstreamifstream类的对象,并且可以指定使用类的对象,并且可以指定使用二进制或文本模式。二进制或文本模式。可以在定义流对象的同时,指定相关联的文件,可以在定义流对象的同时,指定相关联的文件,在构造该对象时自动打开文件;也可以先定义在构造该对象时自动打开文件;也可以先定义流对象,随后调用流对象,随后调用openopen成员函数,指定相关联成员函数,指定相关联的文件并打开。的文件并打开。12.3.2 12.3.2 文件输入文件输入流流 2024/5/434北京邮电大学电信工程学院计算机技术中心很多格式化选项和成员函数都可以应用于很多格式化选项和成员函数都可以应用于ifstreamifstream类对象类对象 nreadread函数函数 read read成员函数从一个文件把字节流读到一个指成员函数从一个文件把字节流读到一个指定的存储区,由长度参数确定要读的字节数。当读定的存储区,由长度参数确定要读的字节数。当读了指定的字节数或遇到文件结束符时读结束。了指定的字节数或遇到文件结束符时读结束。12.3.2 12.3.2 文件输入文件输入流流 2024/5/435北京邮电大学电信工程学院计算机技术中心#include#include#include using namespace std;void main()coutFile of values to be averaged:;char*FileName=“f:temptest.dat”;ifstream file(FileName,ios:binary);if(!file)cerrCannot open FileName for averaging.endl;exit(1);例例12.1312.13:设计一个通用目的的平均值计算器,参加平均计算的:设计一个通用目的的平均值计算器,参加平均计算的数都存在一个文件中。运行计算器程序时,把该文件的文件名数都存在一个文件中。运行计算器程序时,把该文件的文件名从键盘读进来,打开文件,读取其中的数据进行平均计算,把从键盘读进来,打开文件,读取其中的数据进行平均计算,把计算结果输出到屏幕显示。计算结果输出到屏幕显示。2024/5/436北京邮电大学电信工程学院计算机技术中心 int a20,Numbers(20);float Sum=0;file.read(char*)a,Numbers);for(int i=0;i 0)float Average=Sum/Numbers;coutAverage of values from FileName is Averageendl;elsecerrNo values to average in FileNameendl;2024/5/437北京邮电大学电信工程学院计算机技术中心 12.4 12.4 输入输入/输出流输出流输入输出流类输入输出流类iostreamiostream,该类对象可以该类对象可以是数据的源或目的。是数据的源或目的。iostreamiostream类有一个重要的派生类:类有一个重要的派生类:fstreamfstream,它支持磁盘文件的输入和输出,它支持磁盘文件的输入和输出,如果程序需要对同一个磁盘文件既要读如果程序需要对同一个磁盘文件既要读又要写,可以构造一个又要写,可以构造一个fstreamfstream对象。对象。12.4 12.4 输入输入/输出输出流流 2024/5/439北京邮电大学电信工程学院计算机技术中心#include#include using namespace std;struct student /声明新的数据类型声明新的数据类型 long num;/学号学号 char name20;/姓名姓名 char sex;/性别性别 int age;/年龄年龄 stu=20041110,zhang hua,M,21;void main()student s1;fstream myfile(student.dat,ios:in|ios:out|ios:app|ios:binary);例例12.1412.14:打开一个已有的文件,在文件中增加一个学生的记录,并:打开一个已有的文件,在文件中增加一个学生的记录,并把所有记录输出显示。把所有记录输出显示。2024/5/440北京邮电大学电信工程学院计算机技术中心if(myfile.good()myfile.write(char*)&stu,sizeof(stu);myfile.seekg(0);myfile.read(char*)&s1,sizeof(s1);while(!myfile.eof()couts1.num s1.nameendl;myfile.read(char*)&s1,sizeof(s1);elsecoutCant open file!(istream&ins,MyClass&obj);ostream&operator (ostream&outs,MyClass&obj);注注意意:不不能能将将重重载载的的插插入入和和提提取取运运算算符符定定义义为为类类的的成成员函数,只能定义为一般的函数或者类的友元函数。员函数,只能定义为一般的函数或者类的友元函数。12.512.5 重载插入和提取运算符重载插入和提取运算符 2024/5/444北京邮电大学电信工程学院计算机技术中心#include using namespace std;class complex1 public:complex1(int r=0,int i=0)real=r;image=i;complex1 operator+(const complex1&a);void insert(ostream&sout)const;void extract(istream&sin);private:int real;int image;例例12.1512.15:为复数类的输入和输出重载插入和提取运算符。:为复数类的输入和输出重载插入和提取运算符。2024/5/445北京邮电大学电信工程学院计算机技术中心complex1 complex1:operator+(const complex1&a)complex1 c;c.real=real+a.real;c.image=image+a.image;return c;void complex1:insert(ostream&sout)constsoutreal+imagerc1ic2;real=r;image=i;return;2024/5/446北京邮电大学电信工程学院计算机技术中心ostream&operator (istream&sin,complex1&a)a.extract(sin);return sin;void main()complex1 x(1,2);coutxy;x=x+y;coutxendl;2024/5/447北京邮电大学电信工程学院计算机技术中心总结总结流流是是一一种种抽抽象象,它它负负责责在在数数据据的的生生产产者者和和数数据据的的消费者之间建立联系,并管理数据的流动。消费者之间建立联系,并管理数据的流动。程程序序将将流流对对象象看看作作是是“文文件件”对对象象的的化化身身,它它使使标标准准I/OI/O流流、文文件件流流和和串串流流的的操操作作在在概概念念上上统统一一了了起来。起来。有了格式操纵符,有了格式操纵符,I/OI/O的使用更灵活了。的使用更灵活了。I/OI/O支支持持插插入入和和提提取取运运算算符符的的重重载载,使使输输入入、输输出出操作完全融入了操作完全融入了C+C+的类的体系。的类的体系。2024/5/448北京邮电大学电信工程学院计算机技术中心
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


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

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


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