《输入输出流类库》PPT课件.ppt

上传人:sh****n 文档编号:12760349 上传时间:2020-05-22 格式:PPT 页数:49 大小:265KB
返回 下载 相关 举报
《输入输出流类库》PPT课件.ppt_第1页
第1页 / 共49页
《输入输出流类库》PPT课件.ppt_第2页
第2页 / 共49页
《输入输出流类库》PPT课件.ppt_第3页
第3页 / 共49页
点击查看更多>>
资源描述
第14章I/O流类库,14.1输入/输出流类的结构14.2文件流类14.3串流类14.4格式控制14.5流类成员函数的使用14.6数据文件的输入/输出操作,C和C+语言都没有中没有提供专门的输入输出语句。C+中的I/O操作是通过一组标准I/O函数和I/O流来实现的。C+的标准I/O函数是从C语言继承而来的,同时对C语言的标准I/O函数进行了扩充。C+的I/O流不仅拥有标准I/O函数的功能,而且比标准I/O函数功能更强、更方便、更可靠。,14.1输入/输出流类的结构,14.1.1iostream类库的头文件流字节流,即字节序列。在输入操作中,字节从输入设备(如键盘、磁盘、网络连接等)流向内存;在输出操作中,字节从内存流向输出设备(如显示器、打印机、磁盘、网络连接等)。C+的iostream类库提供了数百种功能,iostream类库的接口部分包含在几个头文件中。头文件iostream.h包含了操作所有输入/输出流所需的基本信息,因此大多数C+程序都应包含这个头文件。头文件iostream.h含有cin、cout、cerr、clog四个对象,分别对应标准输入流、标准输出流、非缓冲和缓冲的标准错误流。该头文件提供无格式I/O和格式化I/O功能。,14.1.2输入/输出流类和对象1.输入/输出流类(1)iostream类库包含了许多用于处理I/O操作的类。其中,类istream支持流输入操作,类ostream支持流输出操作,类iostream同时支持流输入和输出操作。(2)类istream和类ostream是通过单一继承从基类ios派生而来的。类iostream是通过多重继承从类istream和ostream派生而来的。其继承的层次结构如下图所示。,ios,iostream,istream,ostream,2.运算符重载与流类和对象运算符重载为完成输入/输出提供了方便的途径。重载的左移位运算符()表示流的输入,称为流读取运算符。这两个运算符可以和标准流对象cin、cout、cerr、clog以及用户自定义的流对象一起使用。(1)cin是类istream的对象,它与标准输入设备(通常指键盘)连在一起。下面的语句用流读取运算符cin(通常是键盘)读取整型值输入到内存中的nGrade变量(假设nGrade为int类型)中。cinnGrade;注意:读取运算符完全能够识别所处理的数据类型。假设已经正确声明了nGrade的类型,那么没有必要为指明数据类型而给流读取运算符添加类型信息。,(2)cout是类ostream的对象,它与标准输出设备(通常指显示设备)连在一起。下面的语句用流插入运算符cout把整型变量nGrade的值从内存输出到标准输出设备上。coutnGrade;同cin一样,流插入运算符cout完全能够识别所处理的数据类型。(3)cerr是类ostream的对象,它与标准错误输出设备连在一起。到对象cerr的输出是非缓冲输出,也就是说插入到cerr中的输出会立即显示出来,非缓冲输出可迅速把出错信息告诉用户。(4)clog是类ostream的对象,它与标准错误输出设备连在一起。到对象clog的输出是缓冲输出。即每次插入clog可能使其输出保持在缓冲区,要等缓冲区刷新时才输出。,14.1.3输出流C+的ostream类提供了格式化输出和无格式输出的功能。输出功能包括:(1)用流插入运算符输出标准类型的数据;(2)用成员函数put输出字符;(3)用成员函数write无格式输出;输出十进制、八进制、十六进制格式的整数;(4)输出各种精度的浮点数;(5)输出在域宽内用指定字符填充空位的数据等等。下面的例子为使用流插入运算符(即重载的运算符)实现流的输出。,例14.1演示用流插入运算符输出实例/演示用流插入运算符输出#includeintmain()coutwelcometoC+!n;coutwelcometo;coutc+!;coutendl;cout(34+52);coutendl;cout34+52=(34+52)endl;return0;,C+的输入/输出流能够自动判别数据类型。但是有时候还得使用类型信息。例如,对于字符串char*类型,假定需要输出其指针的值,即字符串中第一个字符的地址,如果用重载运算符输出,则只是以空(null)字符结尾的char*类型的字符串。这个时候可以使用void*类型来完成指针变量的地址输出。示例程序如下:,#includeintmain()char*pch=test;cout(pch))实现的。流读取运算符通常会跳过输入流中的空格、tab键、换行符等空白字符。流读取运算符也可以连续使用。当遇到输入流中的文件结束符时,流读取运算符返回0(fasle);否则,流读取运算符返回对调用该运算符的对象的引用。,#includeintmain()intnGrade,nHighestGrade=-1;coutnGrade)if(nGradenHighestGrade)nHighestGrade=nGrade;cout请输入成绩(输入文件结束符将退出):;coutnn最高成绩为:nHighestGradenamegrade)outGradeFileregNumbernamegraden;coutaNumberbalance;char*pBuffer=newchar128;ostrstreamoutp(pBuffer,128);outpaNumber=aNumber,balance=balance0;returnpBuffer;,voidmain()char*str=1234100.35;char*pBuf=parseString(str);coutpBufnumberbalance;/从串流中读入一个整数和浮点数char*pBuffer=newcharnLength;,ostrstreamoutp(pBuffer,nLength);/ios:out方式,字串长度为计算出的nLength,/刚好满足输出到pBuffer中的长度要求outp帐号:number“收支:”balance0;/写入pBuffer中,/注意该处如果写入超出pBuffer空间长度的字符,超出部分将不会被写入returnpBuffer;intmain()char*pch=1001125.45;char*pBuf=parseString(pch);coutpBufn;coutn的十六进制为:hexnndecn的八进制为:octnn;cout.flags(10);cout恢复十进制为:nendl;return0;,常用控制符和流格式控制成员函数,14.4.2设置浮点数精度控制浮点流的精度,可以使用控制符setprecision或成员函数precision来格式化小数点后面的位数。语句:coutsetprecision(4)fValue;和语句:cout.precision(4);coutfValue;起到了同样的效果,都将浮点型数据fValue按精确到小数点后面4位数输出。但是不同的系统可能有不同的解释。,#includevoidfn(floatf1,floatf2)coutf1=;cout.precision(2);coutf1;coutnf2=;cout.precision(4);coutf2endl;voidmain()floatf1=29.41560067f;floatf2=12.5671188;fn(f1,f2);,VC+6.0的运行结果:,TC+3.0的运行结果:,f1=12.57f2=29.4156,14.4.3设置域宽成员函数ios:width设置当前的域宽(即输入输出的字符数)并返回以前设置的域宽。如果显示数据所需的宽度比设置的域宽小,空位用填充字符填充。如果显示数据所需的宽度比设置的域宽大,显示数据并不会被截断,而是输出所有位,但可能会出现乱码。控制符setw也可以用来设置域宽。它们的用法如下:cout.width(8);cout10;上面的语句将在输出10之前输出6个空格(默认填充符)。coutsetw(8)10;这条语句可以起到同样的效果。注意:setw(n)或width(n)在下一个域输出后,域宽回到原先的默认值。默认域宽为0,意思是按输出对象的表示宽度输出。下面的语句中,20将紧挨着10输出。coutsetw(8)1020;,14.4.4设置填充符可以使用成员函数fill或控制符setfill来改变所要填充的字符。cout.fill(*);coutsetw(8)10;输出结果为:*10由于输出域宽为8,所以在10前面填充了6个*。下面的语句将起到同样的效果。coutsetfill(*)set(8)10;,14.4.5用户自定义流格式控制符C+提供了非常多的流格式控制符和成员函数来格式化流输入/输出。上面仅介绍了常用的几种控制和成员函数的使用方法。在这里,再简单介绍一种用户自定义流控制符的方法。先看下面的程序示例:例14.7用户自定义流格式控制符实例/演示用户自定义流格式控制符#include/警告符,输出时会发出系统警告声音ostream,intmain()cout测试制表符:endLineatabbtabcendLine测试回车符和警告符:endLine.;coutbell;coutret-endLine;return0;,14.5流类成员函数的使用,在C+中,经常使用cin、cout来做输入/输出。比较常用的I/O流的成员函数有get、getline、put、eof等。1.Get成员函数charistream:get();istream不带参数的get函数从指定的输入流中读取一个字符(包括空白字符),并返回该字符,当遇到输入流中的文件结束符时,返回EOF(即-1)。带1个字符型参数的get成员函数自动读取一个字符(包括空白字符)到字符型参数中。当遇到文件结束符时,返回0,否则返回对istream对象的引用。带3个参数的get成员函数的参数分别是接收字符的字符数组、字符数组的大小和分隔符(默认值为n)。该函数或者在读取比指定的最大字符数少一个字符后结束,或在遇到分隔符时结束。,#include#includeintmain()charbf80;cin.get(bf,80);coutbfendl;charch;while(!cin.eof()ch=cin.get();ch=toupper(ch);if(ch=Y)cout.put(ch);break;coutch;return0;,例14.8I/O流成员函数的使用实例,演示I/O流的get、put、eof成员函数的使用,2.getline成员函数:getline(char*pch,intnCount,chardelim=n”);#include#includeintmain()charstr128;charlineStr128;cout使用get函数,请用键盘输入下面这行字符后按回车:nThisisALineendl;cin.get(str,sizeof(str),A);coutFirstline:strendl;cin.get(str,sizeof(str);,coutSecondline:strendl;cout使用getline函数,请用键盘输入下面这行字符后按回车:nThisisALineendl;cin.getline(lineStr,sizeof(lineStr),A);coutFirstline:lineStrendl;cin.getline(lineStr,sizeof(lineStr);coutSecondline:lineStrphonenum;/读电话coutistream/返回输入流对象的引用,intmain()phonebooka;fstreampb(phone,ios:in|ios:out|ios:app);if(!pb)cout无法打开文件!n;return1;for(;)charc;docout1.输入记录n;cout2.显示记录n;cout3.退出n;coutc;while(c3);switch(c)case1:cina;cout您输入的是:;couta;pba;break;case2:pb.seekg(0,ios:beg);/成员函数seekg(0,ios:beg)表示/将文件位置指针移到文件开头(位置0),/第二个参数指定寻找方向,/ios:beg(默认)相对于流的开头定位,while(!pb.eof()pb.get(c);coutc;pb.clear();/reseteofcoutidname;coutsetiosflags(ios:left)setw(15)marki;coutsetw(6)marki;sum+=marki;aver=sum/4;coutsetw(10)averendl;,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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