欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C++输入输出流.ppt

    • 资源ID:67328291       资源大小:445KB        全文页数:48页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++输入输出流.ppt

    第10章 输入输出流1本章学习要求:o流的概念oC+中I/O处理类层次结构o基于控制台、文件以及字符串的I/O处理210.1 流310.1.1 流的概念计算机中的数据从一个设备到另一个设备的传输,我们就称为数据流(可以想象数据是从一个设备流向另一个设备)。输入/输出的任务实际上就是以一种稳定、可靠的方式在任何设备与内存之间传输数据流。从内存输出到设备的数据流称为输出流(Outputstream);从设备输入到内存的数据流称为输入流(Inputstream)。410.1.2 I/O流的层次结构外部设备程序变量传输管道(字节流)程序尽量不要直接和千变万化的外部存储设备打交道。按照如此想法设计的输入/输出的逻辑结构如图10-1所示。输入输出的逻辑结构传输管道内传输的是字节流,因为任何数据都是以字节为单位保存的。传输管道的左边负责将字节流转换成各种类型的值保存到内存变量,或将内存变量值转换成字节流。传输管道的右边负责将字节流交给外部设备,或将外部设备存储的数据转换成字节流放到管道中。外部设备不关心传递过来的数据是什么类型,只是按照自己的方式将一个个字节保存起来。传输管道的右边负责和具体的外部设备交互,它也不需要知道设备是如何存储数据,只要知道如何将字节流交给外部设备即可。5若将传输管道看作实现I/O功能的流对象,则一个流对象结构上可以分为两层:格式化层和传递层,如图10-2所示。内存产格式化层传递层外部设备I/O流对象格式化层:进行格式化或解析,例如将数据由内存表示转换成指定格式的字节表示,或将字节表示转换成内存中变量格式。传递层:负责缓冲、编码转换和将字符序列传递到外部设备或从外部设备读入字符流。格式化层的主要任务是在输入时负责解析从外部设备读入的字节流,而在输出时负责格式化和产生能输出到外部设备字节流。610.2 C+I/O类库概览 710.2.1 C+I/O类库层次结构 iosiostreamfstreamstringstreamstreambufistreamstreambufostreamfilebuffilebufstringbufstringbufistringstreamifstreamofstreamostringstreamstringbuffilebufios_baseC+流类层次结构中,除了ios_base类外,其他的流类几乎都是模板类。C+中流类层次结构如图所示。810.2.2 I/O基本类的成员及功能1.ios_baseios_base类是非模板类,该类定义了一些输入/输出流类中都具有的函数,以及输出/输出过程中使用的状态标志。2.iosios类定义了一些基础的输入/输出功能.3.istreamistream类定义用来实现输入的基本功能,所有其他实现从具体外部设备输入的流类都必须从其继承。4.ostreamostream类定义用来实现输出的基本功能,所有其他实现向具体外部设备输出的流类都必须从其继承。5.操纵符操纵符(manipulator)也称为控制器函数,是为了简化对I/O流的格式设置和简化流的常用操作而定义的一些inline函数,通过调用这些函数可以设置对应流的输出格式。要在程序中使用操纵符,必须采用#include指令来包含iomanip头文件。910.3 基于I/O类库的控制台I/OC+I/O类库中预定义了四个控制台I/O对象cin、cout、cerror和clog,含义如表所示。对象名类型功能cinistream处理标准输入,即键盘输入coutostream处理标准输出,即屏幕输出cerrostream处理标准出错信息clogostream处理日志信息利用这些对象可以直接进行控制台的输入/输出。其中cin对应着计算机系统的标准输入设备,通常为键盘;cerr以及clog对应着计算机系统的用于输出信息的设备,通常情况下为显示器。基于控制台的I/O,需要包含下列指令:#include1010.3.1 控制台输出1.基本数据类型的输出ostream类重载了操作符提供对基本数据类型数据输出的支持。例例 向控制台输出基本数据类型变量的值。#includeusingnamespacestd;intmain()charch=a;shorts=100;inti=200;longl=1000;unsignedshortus=234;floatf=3.23;doubledf=1.55;charstr=C+IOisveryeasy!;coutchendl;coutsendl;coutiendl;coutlendl;coutusendl;coutfendl;coutdfendl;cout&iendl;coutstr;return0;112.格式化输出数据通常需要按照某种预定义的报表格式进行输出。下面介绍C+I/O中常见的格式控制。C+中的格式化输出通过设置某些标志进行控制,C+已经定义一些操纵符来简化某些格式标记的设置,下面的演示程序以操纵符的使用为主。(1)整数输出通过操纵符hex、oct、dec来实现输出的基数的控制。例例采用十进制、十六进制、八进制分别显示一个整数。#include#includeusingnamespacestd;intmain()intx=100;coutxendl;/默认采用十进制输出couthexxendl;/采用十六进制输出coutshowbaseoctxendl;/采用八进制输出,并输出前缀0coutdecxendl;/采用十进制输出return1;12(2)浮点数输出浮点数字的输出可以采用定点格式和科学计数法两种,采用操纵符fixed、scientific来控制,同时可以通过setprecision来设置浮点数的精度。例例 分别以定点数和科学计数法输出浮点数。#include#includeusingnamespacestd;intmain()doublef=94.873;coutfixedf;/以定点格式输出,带小数点coutscientificfendl;/科学计数法/setprecision(2)设置小数点后有2位有效数coutsetprecision(2)fixedfscientificfendl;13(3)布尔类型输出布尔类型的数据输出可以采用两种方式:字符串(输出true或false)、数字(输出表示真的1或表示假的0)。分别采用boolalpha和noboolalpha操纵符来选择这两种方式。例例分别采用字符和数字方式输出布尔值。#include#includeusingnamespacestd;intmain()boolb1=true,b2=false;coutb1b2endl;coutboolalphab1b2endl;coutnoboolalphab1b2endl;14(4)控制输出宽度有时在发票上,了使打印机输出的内容和发票的样式能够对应上,需要使输出项的输出宽度不小于某个宽度,若输出项自身的宽度大于指定的宽度,则使用输出项自身的宽度。输出宽度的设置可以通过操作符setw。例例将学生姓名和成绩按照上下对齐方式打印。#include#includeusingnamespacestd;intmain()doublevalues=89.5,78,92.5,84;char*names=Zoot,Jimmy,Allen,Stan;for(inti=0;i4;i+)coutsetw(10)namesisetw(10)valuesiendl;15(5)对齐上例中输出项默认都是靠左边对齐的,可以通过left、right等控制输出项的对齐方式,如10.5中的输出语句改为:coutleftsetw(10)namesisetw(6)valuesiendl;16(6)填充字符可以使用fill操纵符来指定在指定宽度的输出中,采用的填充字符,默认的为空格.例例 将姓名和成绩按照固定宽度对齐输出,并利用*填充空白部分。#include#includeusingnamespacestd;intmain()doublevalues=89.5,78,92.5,84;char*names=Zoot,Jimmy,Allen,Stan;cout.fill(*);for(inti=0;i4;i+)coutsetw(10)namesisetw(10)valuesiendl;173.其他输出函数C+中,除了使用操作符实现输出功能以外,也可以使用输出流对象的put、write函数实现数据的输出。函数原型见表10-5。这些成员函数既可用于ASCII文本流,也可用于二进制流,尤其适用于二进制流输出。例例使用put函数输出数据。#includeusingnamespacestd;intmain()couta,bn;cout.put(a);cout.put(,);cout.put(b);cout.put(n);charc1=A,c2=B;cout.put(c1);cout.put(,);cout.put(c2);18例例使用write函数输出数据。#includeusingnamespacestd;voidPrintString(char*s)cout.write(s,strlen(s).put(n);/write返回的是一个输出流对象cout.write(s,6)n;intmain()charstr=Iloveyou?;coutThestringis:str)来实现数据的输入。使用运算符输入数据时,系统跳过开头空白符(包括:空格()、制表符(t)、换行符(n)、流结束符),然后提取待输入数据类型中所具有的符号。1.整数输入使用输入整数时,系统跳过开头的空白字符然后读取一个数字,直到遇到非数字字符。整数的输入可以采用十进制、八进制、十六进制三种格式。例例 采用十进展制、十六进制、八进制输入整数。#include#includeusingnamespacestd;intmain()intx,y,z;cinx;/默认输入流中的整型数据为10进制格式cinhex;/设置输入流中的整型数据为16进制格式ciny;cinoctz;/采用8进制输入整数值coutxyz;/默认采用十进制输出数值202.浮点数输入浮点数的输入可以采用定点数和科学计数法两种格式。例例输入浮点数。#include#includeusingnamespacestd;intmain()doubled,d1,d2;floatf,f1,f2;cindf;/默认输入的数字是浮点数格式cinscientific;/指定输入的数字是科学计数法格式cind1f1;cinfixedd2f2;/指定输入的数字是浮点数格式/默认采用定点数格式输出coutdd1d2endl;coutff1f2;213.布尔类型的输入布尔类型的输入可以采用两种格式:字符方式(true和false)、数字方式(1和0)。例例 输入布尔类型值。#include#includeusingnamespacestd;intmain()boolb1,b2,b3,b4;cinboolalpha;/设置输入的布尔值是true或false格式的cinb1b2;cinnoboolalphab3b4;/设置输入的布尔值是1或0格式的/默认采用数字方式输出布尔值coutb1b2b3b4;coutboolalpha;/采用true或false格式输出布尔值coutb1b2b3b4从输入流抽取字符串时,有两种终止方式:遇到空白字符。如果使用setw时,只能抽取固定数目的字符。例例输入字符串。#include#include#includeusingnamespacestd;intmain()stringstr;coutstr;cout接收的字符串为:setw(sz)buf;系统最多抽取sz-1个字符,最后一个存储空间存放串结束0。245.其他输入函数除了提取符外,也可以利用istream类的其他成员函数如,get、getline、read来实现数据的输入.(1)get用来获取一个字符例例从键盘输入一串字符,判断其中字符c的个数,并输出。#includeusingnamespacestd;intmain()charch;intcount=0;charc=c;cout输入:;while(ch=cin.get()!=EOF)if(ch=c)count+;cout输入的字符串中字符c出现了:count次;25(2)getline函数用来获取一行getline函数原型为:istream&istream:getline(char*buf,intLimit,Deline=n);例例利用getline从键盘输入字符串。#includeusingnamespacestd;intmain()charch;intcount=0;charc=c;cout输入:;chars20;charb10;cin.getline(s,20,#);/最多读入19个字节或遇到#或遇到n,读取结束cin.getline(b,10);/最多读入9个字节或遇到n,读取结束cout输出:endl;coutsendl;coutb和(istream&,类类型&);输出运算符的一般形式为:ostream&operator和实现该类对象具有自动的输入和输出功能。#includeusingnamespacestd;classPhoneNumberfriendostream&operator(istream&,PhoneNumber&);private:charareaCode4;charexchange4;charline9;/输出格式为:(国别)区号-号码ostream&operator(ostream&output,PhoneNumber&num)output(num.areaCode)num.exchange-num.line;cout(istream&input,PhoneNumber&num)input.ignore();/跳过一个字节:(input.getline(num.areaCode,4);input.ignore(2);/跳过两个字节:)和空格input.getline(num.exchange,4);input.ignore();input.getline(num.line,9);returninput;intmain()PhoneNumberpn;cinpn;coutendl;coutpn;return0;2910.4 基于I/O类库的文件I/O 3010.4.1 文件的概念 在C+中,把文件看成是由一系列字节所构成的字节流,称为流式文件。根据文件中数据的组织形式,可分为文本形式文件和二进制形式文件。这两种文件格式的重要区别为:文本文件中通常包含的是可显的字符以及有限的几个控制字符(如:t、n、r等),而二进制文件中可以包含任意的二进制字节。文本方式一般用于存储具有“行”结构的数据,如源程序以及纯文本格式的数据等;二进制文件一般用于存储无显式结构的数据,如目标代码程序以及二进制数据等。31每个流对象内部都有一个指针称为文件位置指针,它指出该流对象所关联的文件的当前读写的位置,如图10-5所示。b1 b2 b3 b4 文件位置指针如果我们把一个文件看作一个未知长度的字节数组的话,则该位置指针就象是数组的下标。进行输入/输出操作时,每输入/输出一个字节,文件位置指针都会自动往后移动一个字节位置。即文件位置指针总是指向下个将要被读的字节位置/下一个将要被写的字节位置。在利用I/O类库进行文件输入/输出时,需要包含下面指令:#include#include3210.4.2 文件输出 文件输出是指将内容输出到文件中,基本流程为:(1)打开文件:创建ofstream流类的对象,建立流对象与文件的关联;(2)输出数据:利用ofstream的以及其他的输出函数将数据写入到文件;(3)关闭文件:利用ofstream成员函数close关闭流对象。1打开文件打开文件有两种方法:直接方法和间接方法。直接方法是在创建流对象时指定关联的文件名和打开方式,如:ofstreamout_file(f1.txt,ios:out);间接方法是创建ofstream类对象后,调用ofstream的成员函数open来指定关联的外部文件以及打开方式,建立流和文件的关联。如:ofstreamout_file;out_file.open(f1.txt,ios:binary);ios:binary表示打开该文件,并将以二进制流的形式进行输出。33打开过程中,指定的ios:out或ios:binary都是设置了文件打开的方式,他们是定义在ios类中的枚举常量,有多中选择,如表所示。方式意义ios:in打开文件进行入ios:out打开文件进行输出ios:app添加模式,如果文件存在,则数据添加到文件末尾ios:ate打开文件,同时文件指针指向文件末尾ios:trunc如果文件已存在,则清空文件内容。若指定了ios:out,而未指定ios:app、ios:ate、ios:in,则同时默认此方式ios:binary将文件视为二进制流,默认方式是文本字节流342输出数据文件成功打开后,可以使用插入运算符()或ofstream类的一些成员函数来进行文件输出操作。其实,文件的输出和控制台的输出没有太多的区别。例例从键盘输入数据,并输出到文件。#include#includeusingnamespacestd;intmain()ofstreamout_file(c:myfile.txt);if(!out_file)return;intx=100;doubley=3.14;out_filex,yendl;out_fileWWW.HHU.EDU.CN以及其他的输入函数读文件中数据;(3)关闭文件:利用ifstream的成员函数close关闭流对象,取消流对象和文件的关联。371打开文件创建ifstream类的对象,并与外部文件关联。建立ifstream对象与外部文件关联有两种方法:直接法和间接法。如:ifstreamin_file(f1.txt,ios:in);/直接法,以文本形式打开文件f1.txt进行读或ifstreamin_file;in_file.open(f1.txt,ios:in);/间接法,以文本形式打开文件f1.txt进行读ios:in用来控制文件打开的方式。在进行输入操作前也要判断文件是否正确打开。代码如下:if(!in_file)/或in_file.faile()或!in_file.is_open()/处理打开失败382从文件读数据文件成功打开后,可以使用抽取操作符()或ifstream类的一些成员函数进行输入操作,方法和基于控制台的输入基本相同。39例例读入上例输出的数据,并显示。#include#include#includeusingnamespacestd;intmain()ifstreamin_file(c:myfile.txt);if(!in_file)return1;intx;doubley;strings;in_filex;in_file.ignore();/忽略逗号,in_filey;in_files;/将WWW.HHU.EDU.CN输入到s中charln=in_file.get();/读到的是WWW.HHU.EDU.CN后的回车符charc=in_file.get();/读到的是#in_file.ignore();/忽略#后面的回车符,它是一个字节chararray18;in_file.getline(array,16);/读取一行coutx,yendl;couts;coutln;coutcendl;coutarray;in_file.close();403.关闭文件读入操作结束后,应使用close关闭文件:in_file.close();4110.4.4 文件随机存取以上介绍的ostream和ifstream只能进行输出或输入操作,如果需要打开一个既能输入也能输出数据的文件,则需要创建一个fstream类的对象,下面打开的文件既能读出又能写入数据:fstreamio_file(c:test.txt,ios:in|ios:out);/打开文件或fstreamio_file;io_file.open(c:test.txt,ios:in|ios:out);ios:in和ios:out用来控制文件打开的方式,具体的打开方式控制参数见表10-7的说明部分。以读写方式打开的文件,在流对象内部设置了两个文件位置指针,一个用于指定读的位置,一个用于指定写的位置,这两个位置指针是不同的。42一般情况下读写是顺序进行的,即逐个字节进行,但是对于二进制数据文件来说,可以利用流中的成员函数移动文件位置指针,随机访问文件中任意位置上的数据,还可以修改文件内容。文件流所提供的和文件指针操作有关的成员函数如表所示.成员函数作用tellg()返回文件输入流指针的位置seekg(文件中的位置)将文件输入流指针移到指定位置seekg(位移量,参照位置)以参照位置为基础移动若干字节tellp()返回文件输出流指针的位置seekp(文件中的位置)将文件输出流指针移到指定位置seekp(位移量,参照位置)以参照位置为基础移动若干字节4310.5 基于I/O类库的字符串I/O。C+提供了istringstream(输入)、ostringstream(输出)和stringstream(输入输出)来支持字符串输入输出,要使用字符串I/O功能,需要在程序中包含指令:#include#include基于I/O类库的字符串输入输出,和文件输入输出的方法基本相同,只是流对象所关联的设备不是外部文件,而是内存中的一块缓冲区(存储单元)。同时要注意,字符串输入输出流对象没有open和close函数,即不需要通过open和close来打开设备和关闭设备。441输出字符串流对象ostringstream类提供的构造函数的原型为:ostringstream:ostringstream(intmode=ios:out);创建输出字符串流对象:ostringstreamstrout;该流对象所关联的缓冲区有strout内部动态申请。下面的语句向流对象输出:inta,b;cinab;stroutxyxcy;/x=100,c=,y=200463.字符串输入输出流stringstream类创建的流对象既可进行字符串输出也可进行字符串输入,它提供了两个构造函数,原型为:stringstream:stringstream(intmode=ios:in|ios:out);stringstream:stringstream(stringstr,intmode=ios:in|ios:out);默认的打开方式都为ios:in|ios:out,也可以单独指定ios:in或ios:out。第一种方式的构造函数中,缓冲区由流对象自己动态申请,第二种方式的构造函数中,则程序员提供一个str作为缓冲区。47例例字符串输入输出流。#include#include#includeusingnamespacestd;intmain()intx;stringstreamss;/建立输入输出流ss100;ss200;coutss=(ss.str()x;coutx0=xendl;ss.seekp(0);/将输出流指针移到流开始,注意:输入流的指针没有改变ss300;/覆盖了200coutss=(ss.str()x;coutx1=x;48

    注意事项

    本文(C++输入输出流.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开