91第10章输入输出流.ppt
《91第10章输入输出流.ppt》由会员分享,可在线阅读,更多相关《91第10章输入输出流.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章输入/输出流10.1输入/输出流概述10.2插入运算符及提取运算符10.3格式化输入输出10.4文件的输入输出10.5输入输出文件流fstream10.1 输入/输出流概述10.1.1流的概念“流流”是一种抽象的形态,指的是计算机里的是一种抽象的形态,指的是计算机里的数据从一个对象数据从一个对象流向另一个对象流向另一个对象。这里数据流入和流出的对象通常是指计算机中。这里数据流入和流出的对象通常是指计算机中的屏幕、内存、文件等一些输入输出设备。数据的流动就是由的屏幕、内存、文件等一些输入输出设备。数据的流动就是由I/OI/O流类来实现的。流类来实现的。如预定义流对象如预定义流对象cinc
2、in和和coutcout实现的数据流动过程:实现的数据流动过程:C+C+中的中的I/OI/O流负责建立程序与设备对象之间的连接,它像一流负责建立程序与设备对象之间的连接,它像一个桥梁,沟通了数据的产生者和消费者,使他们之间产生数据的个桥梁,沟通了数据的产生者和消费者,使他们之间产生数据的流动流动。第10章 输入/输出流内存内存数据流显示器显示器流对象流对象cout键盘键盘数据流内存内存流对象流对象cin10.1 输入/输出流概述10.1.2流类库的结构第10章 输入/输出流streambuffilebufstrstreambufstdiobufostreamiosistreamiftream
3、istrstream istream_withassignoftream ostrstream ostream_withassign iostreamfstreamstrstream stdiostreamIostream_init第10章 输入/输出流类名说明包含头文件抽象流基类ios所有输入输出流类的基类ios.h输入流类istream通用输入流类和其他输入流的基类 iostream.hifstream输入文件流类fstream.histrstream输入字符串流类strstrea.histream_withassign cin的输入流类iostream.h输出流类ostream通用输出流
4、类和其他输出流的基类iostream.hofstream输出文件流类fstream.hostrstream输出字符串流类strstrea.hostream_withassigncout、cerr、clog的输出流类iostream.hI/O流类说明表输入输出流类iostream通用输入/输出流类和其他输入/输出流类的基类iostream.hfstream输入/输出文件流类fstream.hstrstream输入/输出字符串流类strstrea.hstdiostream标准I/O文件的输入输出类stdiostr.h流缓冲区类streambuf抽象流缓冲区基类iostream.hfilebuf磁盘
5、文件的流缓冲区类fstream.hstrstreambuf字符串的流缓冲区类strstrea.hstdiobuf标准I/O文件的流缓冲区类stdiostr.h预先定义的流初始化类Iostream_init初始化预定义流对象的类iostream.h第10章 输入/输出流I/O流类说明表(续)10.1 输入/输出流概述10.1.2流类库的结构(续)流类库中与文件输入输出相关的文件流类结构:流类库中与文件输入输出相关的文件流类结构:第10章 输入/输出流iosistreamostreamifstreamofstreamiostreamfstream 返 回10.2 插入运算符与提取运算符1.插入运算
6、符 插插入入运运算算符符“”:通通常常用用于于插插入入数数据据到到一一个个输输出出流流对对象象中中,流对象再进一步将数据输出到它所关联的设备中。流对象再进一步将数据输出到它所关联的设备中。如:如:coutcout“HelloWorld!”“HelloWorld!”插入运算符插入运算符“”适用于任何输出流对象,如输出文件流适用于任何输出流对象,如输出文件流ofstreamofstream的对象等。的对象等。“”右侧可以是任何标准数据类型的变量右侧可以是任何标准数据类型的变量及常量,也可以是字符串变量及常量。及常量,也可以是字符串变量及常量。如:如:coutcoutis3.14f;is3.14”:
7、通常用于从输入流对象中提取数据通常用于从输入流对象中提取数据。如:如:intinti;charbuf100;i;charbuf100;cincini;i;cincinbufbuf;提取运算符提取运算符“”适用于任何输入流对象,如输入文件流适用于任何输入流对象,如输入文件流ifstreamifstream的对象等。的对象等。“”右侧可以是任意标准数据类型的变量,右侧可以是任意标准数据类型的变量,也可以是字符串变量。也可以是字符串变量。注意:注意:使用提取运算符使用提取运算符“”提取数据时,提取数据时,以空白符以空白符(如空(如空格、回车、格、回车、tabtab)作为数据的分割符作为数据的分割符,
8、因此提取字符串数据时,不,因此提取字符串数据时,不能提取空白字符。能提取空白字符。第10章 输入/输出流 返 回10.3 格式化输入输出C+C+中的中的I/OI/O流可以完成输出流可以完成输出/输入的格式化操作,如设置域宽、输入的格式化操作,如设置域宽、设置精度及整数进制等。设置精度及整数进制等。设置输入输出格式的方法:使用流操纵元使用流操纵元,只需把流操纵元插入(提取)到输出流(输,只需把流操纵元插入(提取)到输出流(输入流)中即可对输出流(输入流)进行格式化,如入流)中即可对输出流(输入流)进行格式化,如setiosflagssetiosflags、setwsetw、setfillsetf
9、ill、setprecisionsetprecision、hexhex、octoct等,使用流操纵元时需等,使用流操纵元时需在程序中包含头文件在程序中包含头文件iomanip.hiomanip.h 通过流的成员函数通过流的成员函数,即由流对象直接调用完成格式化,如,即由流对象直接调用完成格式化,如setfsetf、unsetfunsetf、widthwidth、fillfill、precisionprecision等。使用流成员函数的优等。使用流成员函数的优点是在设置格式同时,可以返回以前的设置,便于恢复原来的点是在设置格式同时,可以返回以前的设置,便于恢复原来的设置。设置。第10章 输入/输
10、出流10.3 格式化输入输出10.3.1输出宽度控制:setw和width使用使用流操纵元流操纵元setwsetw和和成员函数成员函数widthwidth可以控制当前可以控制当前域宽域宽(即输(即输入入/输出的字符数)。输出的字符数)。注意:注意:(1)(1)宽度的设置宽度的设置仅适用于下一个仅适用于下一个插入或读取的插入或读取的数据数据。(2)(2)在输出流中控制域宽,如果输出数据的宽度比设置的域宽在输出流中控制域宽,如果输出数据的宽度比设置的域宽小,将以小,将以默认右对齐默认右对齐方式输出数据,左边空位会用填充字符来填方式输出数据,左边空位会用填充字符来填充(充(填充字符默认是空格填充字符
11、默认是空格)。)。(3)(3)如果输出数据的宽度比设置的宽度大,如果输出数据的宽度比设置的宽度大,数据不会被截断数据不会被截断,将输出所有位数。将输出所有位数。第10章 输入/输出流例10.1使用setw操纵元控制域宽#include#includevoidmain()cout123endl;coutsetw(5)4.56.7endl;程序运行结果为:程序运行结果为:1231234.56.74.56.7第10章 输入/输出流域宽仅适用于下一个数据;域宽仅适用于下一个数据;实际数据比设置的域宽小,将实际数据比设置的域宽小,将右对齐,左补空格右对齐,左补空格例10.2使用width成员函数控制域宽
12、#includevoidmain()char*str3=“abc”,“abcde”,“abcdef”;for(inti=0;i3;i+)cout.width(5);coutstriendl;程序运行结果为:程序运行结果为:abcabcabcdeabcdeabcdefabcdef第10章 输入/输出流10.3 格式化输入输出10.3.2填充字符控制:setfill和fill 在在缺缺省省情情况况下下,如如果果域域宽宽大大于于数数据据宽宽度度时时,填填充充多多余余空空间间的的字字符符是是空空格格。如如果果要要改改变变填填充充字字符符,可可以以使使用用流流操纵元操纵元setfillsetfill和和
13、成员函数成员函数fillfill。注注意意:设设置置了了填填充充字字符符后后,将将对对程程序序后后面面的的输输出出代代码码产生永久影响产生永久影响,直到下一次再改变填充字符为止。,直到下一次再改变填充字符为止。第10章 输入/输出流例10.3使用setfill控制填充字符#include#includevoidmain()doublevalues=1.23,15.16,653.7,4358.24;coutsetfill(*);for(inti=0;i4;i+)coutsetw(10)valuesiendl;程序运行结果为:程序运行结果为:1231234.56.74.56.7第10章 输入/输出
14、流此语句也可以改为:此语句也可以改为:cout.fill(*);fill()成员函数将返回设置前的填成员函数将返回设置前的填充字符充字符10.3 格式化输入输出10.3.3输出精度控制:setprecision和precision使使用用流流操操纵纵元元setprecisionsetprecision以以及及成成员员函函数数precisionprecision可可以以控制浮点数输出的精度。控制浮点数输出的精度。注注意意:精精度度一一旦旦设设置置,就就可可以以用用于于以以后后所所有有输输出出的的数数据据,直到下次精度发生改变。,直到下次精度发生改变。使用成员函数使用成员函数precisionpr
15、ecision可以返回设置前的精度。可以返回设置前的精度。第10章 输入/输出流例10.4控制浮点数精度#include#includevoidmain()doublevalue=31.4142743;intPreprecision=cout.precision(4);coutvalueendl;coutsetprecision(Preprecision)valueendl;程序运行结果为:程序运行结果为:31.4131.4131.414331.4143第10章 输入/输出流通过通过precision成员函数设置精成员函数设置精度后,将以前精度值返回并保存度后,将以前精度值返回并保存在变量在变
16、量Preprecision中。中。注意注意:系统默认精度为:系统默认精度为6,恢复原来的精度设置恢复原来的精度设置10.3 格式化输入输出10.3.3输出精度控制(续)所所设设置置的的精精度度值值,在在程程序序没没有有设设置置计计数数法法情情况况下下,表表示示浮浮点点数数的的 有有 效效 数数 字字 的的 个个 数数。若若 程程 序序 设设 置置 了了 计计 数数 法法(ios:fixedios:fixed或或ios:scientificios:scientific),则表示),则表示小数点后数字的个数小数点后数字的个数。ios:fixedios:fixed 表示以表示以定点法定点法输出浮点数
17、(不带指数)。输出浮点数(不带指数)。ios:scientificios:scientific 表示以表示以科学计数法科学计数法输出浮点数。输出浮点数。第10章 输入/输出流例10.4(续一)#include#includevoidmain()doublevalue=31.4142743;coutsetiosflags(ios:fixed);intPreprecision=cout.precision(4);coutvalueendl;coutsetprecision(Preprecision)valueendl;程序运行结果为:程序运行结果为:31.414331.414331.4142743
18、1.414274第10章 输入/输出流设置计数法:以定点法设置计数法:以定点法输出浮点数输出浮点数例10.4(续二)#include#includevoidmain()doublevalue=31.4142743;coutsetiosflags(ios:scientific);intPreprecision=cout.precision(4);coutvalueendl;coutsetprecision(Preprecision)valueendl;程序运行结果为:程序运行结果为:3.1414e+0013.1414e+0013.141427e+0013.141427e+001第10章 输入/输
19、出流设置计数法:以科学计设置计数法:以科学计数法输出浮点数数法输出浮点数10.3 格式化输入输出10.3.4其他格式状态 上上 例例 中中 的的 setiosflagssetiosflags也也 是是 一一 个个 流流 操操 纵纵 元元,定定 义义 在在 头头 文文 件件 中。中。通通过过将将setiosflagssetiosflags的的参参数数设设置置为为各各种种不不同同流流格格式式状状态态标标志志值值,可可以对相应的输入输出格式进行控制。以对相应的输入输出格式进行控制。若若需需要要同同时时设设置置多多个个标标志志位位时时,可可以以使使用用按按位位或或运运算算符符(|)将将不同的标志项结合
20、。不同的标志项结合。第10章 输入/输出流第10章 输入/输出流流格式状流格式状态标志志说明明ios:skipwsios:leftios:rightios:internalios:decios:octios:hexios:showbaseios:showpointios:uppercaseios:showposios:scientificios:fixed跳跳过输入流的空白字符入流的空白字符在在输出域中左出域中左对齐输出,必要出,必要时,在右,在右边填充字符填充字符在在输出域中右出域中右对齐输出,必要出,必要时,在左,在左边填充字符(默填充字符(默认)在在输出域中左出域中左对齐数数值的符号及的
21、符号及进制符号,右制符号,右对齐数字数字值以十以十进制形式格式化指定整数(默制形式格式化指定整数(默认)以八以八进制形式格式化指定整数制形式格式化指定整数以十六以十六进制形式格式化指定整数制形式格式化指定整数在数在数值前前输出出进制(制(0表示八表示八进制,制,0 x或或0X表示十六表示十六进制)制)输出浮点数出浮点数时显示小数点和尾部的示小数点和尾部的0输出十六出十六进制数制数时显示大写字母示大写字母AF,科学,科学计数法数法显示大写示大写E输出正数出正数时前面加正号(前面加正号(+)以科学以科学计数法数法显示浮点数示浮点数以定点表示法以定点表示法显示浮点数示浮点数I/O流格式状态标志 例1
22、0.5使用setiosflags控制流格式#include#includevoidmain()intx=200;coutsetiosflags(ios:internal|ios:showpos);coutsetw(10)xendl;coutsetiosflags(ios:hex|ios:uppercase|ios:showbase);coutsetw(10)xendl;coutoctsetw(10)xendl;第10章 输入/输出流将将oct直接插入流中,也可使用:直接插入流中,也可使用:setiosflags(ios:oct)程序运行结果为:程序运行结果为:+200+2000XC80XC80
23、310031010.3 格式化输入输出10.3.4其他格式状态(续)使用流操纵元使用流操纵元setiosflagssetiosflags设置相应的标志位后,对流对象产生设置相应的标志位后,对流对象产生的的影响是持久的影响是持久的,若想,若想恢复以前的默认设置恢复以前的默认设置,可以通过,可以通过resetiosflagsresetiosflags流操纵元流操纵元关闭相应的标志位。关闭相应的标志位。如:如:coutcoutresetiosflagsresetiosflags(iosios:internal|:internal|iosios:showbaseshowbase);可以取消对域中对齐格
24、式的设置,同时取消显示数制标志,恢可以取消对域中对齐格式的设置,同时取消显示数制标志,恢复系统默认格式。复系统默认格式。第10章 输入/输出流 返 回10.4 文件的输入输出 处处理理文文件件输输入入输输出出的的流流类类主主要要有有ofstreamofstream、ifstreamifstream和和fstreamfstream三三个类。均定义在个类。均定义在fstream.hfstream.h中。中。向向文文件件输输出出数数据据即即将将数数据据保保存存到到文文件件中中时时,要要使使用用ofstreamofstream类类;从从文文件件中中读读取取数数据据即即从从文文件件中中输输入入数数据据时
25、时,要要使使用用ifstreamifstream类类。而而使用使用fstreamfstream类可以同时进行类可以同时进行输入及输出输入及输出操作。操作。文件输入输出的一般步骤为:文件输入输出的一般步骤为:创建流对象并打开文件创建流对象并打开文件读写文件读写文件关闭文件关闭文件第10章 输入/输出流10.4 文件的输入输出10.4.1打开文件1.1.使用默认构造函数,然后调用使用默认构造函数,然后调用使用默认构造函数,然后调用使用默认构造函数,然后调用openopen函数函数函数函数 用法如下:用法如下:文件文件I/OI/O流类名流类名流对象名;流对象名;/声明一个流对象声明一个流对象流对象名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 91第10章 输入输出流 91 10 输入输出
限制150内