第八章 C++流.ppt
《第八章 C++流.ppt》由会员分享,可在线阅读,更多相关《第八章 C++流.ppt(41页珍藏版)》请在麦多课文档分享上搜索。
1、第八章 C+流,8.1 C+流的概念 8.2 输入输出格式控制 8.3 文件操作 8.4 字符串流,8.1 C+流的概念,1、C+流:是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器和磁盘)输出的过程。这种输入输出过程被形象地比喻为“流”。,2、在C+语言中,数据的输入和输出(I/O)包括三个方面:,(1)标准I/O:对标准输入设备键盘和标准输出设备显示器的输入输出。,(2)文件I/O:对在外存磁盘上文件的输入输出。,3、C+语言系统为实现数据的输入和输出定义了一个庞大的类库,称为I/O类库。其所有类被包含在三个系统头文件中:,(3)串I/O:对
2、内存中指定的字符串存储空间的输入输出。,iostream.h:fstream.h:strstrea.h:,包含的类有:ios,iostream,istream,ostream,iostream _withassign, istream_withassign,ostream_withassign等。,包含的类有:fstream,ifstream,ofstream,fstreambase, 以及iostream.h 中的所有类。,包含的类有:strstream,istrstream,ostrstream, strstreambase,以及iostream.h 中的所有类。,在一个程序或一个编译单元
3、(即一个程序文件)中,当需要进行标准 I/O 时,则必须包含头文件 iostream.h,当需要进行文件 I/O 时,则必须包含头文件 fstream.h,当需要进行串 I/O 时,则必须包含头文件 strstrea.h。,C+还为用户进行标准 I/O 操作定义了四个类对象,分别是:,cin: cout: cerr: clog:,代表标准输入设备键盘,是 istream_withassign 流类的对象。,都是 ostream_withassign 流类的对象。,代表标准输出设备显示器,代表错误信息输出设备显示器,根基类,8.2 输入输出格式控制,8.2.1 ios类中的枚举常量,在根基类 i
4、os 中定义有三个用户需要使用的枚举类型,由于它们是在公用成员部分定义的,所以其中的每个枚举类型常量在加上 ios: 前缀后,都可以为本类成员函数和所有外部函数访问。,一、无名枚举类型,该枚举类型中定义的每个枚举常量都是用于设置控制输入输出格式的标志使用的。类型定义如下:,enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio ;,各枚举常量的含义如下:,(1)skipws:设置该标志后,从流中输入数据时跳过当前位置及后面的所有
5、连续的空白字符,从第一个非空白字符起读数,否则不跳过空白字符。默认为设置。,空格、制表符t、回车符r、换行符n统称为空白符。,(2) left、right、internal:用于设置输出数据的对齐格式。,left:在指定的域宽内按左对齐输出。,(3)dec、oct、hex:,right:在指定的域宽内按右对齐输出。这是默认设置。,internal:在指定的域宽内使数值的符号按左对齐、数值本身按右对齐输出。,域宽内剩余的字符位置用填充字符填充。,设置 dec 标志后,使以后的数值按十进制输出。,设置 oct 标志后,使以后的数值按八进制输出。,设置 hex 标志后,使以后的数值按十六进制输出。,
6、默认设置,(4)showbase:用于设置输出数值前面是否加上 “基指示符”。,八进制数的基指示符为数字0;十六进制数的基指示符为0x,十进制数没有基指示符。默认为不设置。,(5)showpoint:强制输出的浮点数中带有小数点和小数尾部的无效数字0。默认为不设置。,(6)uppercase:设置该标志后,使输出的十六进制数和浮点数中使用的字母为大写。否则为小写。默认为不设置。,(7)showpos:设置该标志后,使输出的正数前带有正号“+”。默认为不设置。,(8)scientific,fixed:用于设置浮点数的输出格式。,scientific:设置后使浮点数按科学表示法输出;,fixed:
7、设置后使浮点数按定点表示法输出;,默认时由系统根据输出的数值选用合适的表示法输出。,二、open_mode 枚举类型,该枚举类型中定义的每个枚举常量规定一种文件打开的方式,在定义文件流对象和打开文件时使用。类型定义如下:,enum open_mode in,out,ate,app,trunc,nocreate,noreplace,binary ;,三、seek_dir 枚举类型,该枚举类型中定义的每个枚举常量用于对文件指针的定位操作。类型定义如下:,enum seek_dir beg,cur,end ;,8.2.2 ios类中的成员函数,ios 类提供成员函数对流的状态进行检测和进行输入输出
8、格式控制等操作,每个成员函数的声明格式和简要说明如下:,int bad( );,int eof( );,int fail( );,void clear( );,/ 操作出错时返回非 0 值。,/ 读取到流中最后的文件结束符时返回非 0 值。,/ 操作失败时返回非 0 值。,/ 清除 bad,eof 和 fail 所对应的标志状态, / 使之恢复为正常状态值 0 ,使 good 标志 / 状态恢复为 1。,int good( );,/ 操作正常时返回非 0 值,当操作出错、失败 / 和读到文件结束符时均为不正常,则返回 0 。,char fill( );,char fill( char c );
9、,/ 返回当前用于 I/O 控制的格式状态字。,long flags( long f );,int precision( );,long flags( );,int precision( int n );,/ 设置浮点数的输出精度为 n,返回此/ 前的输出精度。系统预设置的输出精/ 度为 6,即输出的浮点数最多具有 6 / 位有效数字。,/ 返回当前使用的填充字符。,/ 重新设置流中的填充字符为 c 的值,/ 返回此前的填充字符。系统预设置/ 的填充字符为空格。,/ 重新设置格式状态字为 f 的值, / 返回此前的格式状态字。,/ 返回浮点数的输出精度(有效数字的位数)。,int rdstat
10、e( );,long unsetf( long f );,int width( );,long setf( long f );,int width( int w );,/ 设置下一个数据值的输出域宽为 w, / 返回上一个数据值的输出域宽,若无 / 规定则返回 0。 / 注意:此设置只对下一个输出数据有效。,/ 操作正常时返回 0 ,否则返回非 0 值,,/ 根据参数 f 设置相应的格式化标志,返/ 回此前的设置。参数 f 所对应的实参为 / 无名枚举类型中的枚举常量,可以同时/ 使用一个或多个常量,每两个常量之间/ 要用按位或操作符连接。,/ 根据参数 f 清除相应的格式化标志, / 返回此
11、前的设置。,/ 返回当前的输出域宽。输出域宽是指 / 输出的值在流中所占有的字节数。,因为所有 I/O 流类都是 ios 的派生类,所以它们的对象 都可以调用 ios 类中的成员函数和使用 ios 类中的格式化常量 进行输入输出格式控制。,下面以标准输出流对象 cout 为例说明输出的格式化控制。,例8-1:使用 dec、oct、hex 、showbase、uppercase 。,例8-2:设置输出域宽、对齐方式和填充字符等。,例8-3:浮点数的输出控制。,8.2.3 格式控制操纵符,数据输入输出的格式控制还有更简便的形式,就是使用系统头文件 iomanip.h 中提供的操纵符。使用这些操纵符
12、不需要调用成员函数,只要把它们作为插入操作符)的输出对象即可。这些操纵符及其功能如下:,dec,oct,ws,/ 输出换行符n并刷新流。刷新流:是指把流缓 / 冲区中的内容立即写入到对应的物理设备上。,endl,/ 转换为按十进制输出整数,这是系统预置的进制,/ 转换为按八进制输出整数,/ 从输入流中读取空白字符。,hex,/ 转换为按十六进制输出整数,ends,flush,/ 设置 f 所对应的格式化标志。功能与 / setf( long f )成员函数相同。,resetiosflages( long f ),setfill( int c ),setiosflages( long f ),s
13、etprecision( int n );,/ 设置浮点数的输出精度为 n。,/ 输出一个空字符0。,/ 只刷新一个输出流。,/ 清除 f 所对应的格式化标志,功能与 / unsetf( long f )成员函数相同。,/ 设置填充字符为 ASCII 码为 c 的字符。,setw( int w ),/ 设置下一个数据的输出域宽为 w。,在上面的操纵符中, dec、oct、hex 、 endl、 ends、 flush 和 ws 除了在 iomanip.h 中有定义外,在 iostream.h 中也有定义。 所以当程序或编译单元中只需要使用这些不带参数的操纵符时, 可以只包含 iostream.
14、h 文件,而不需要包含 iomanip.h 文件。,下面以标准输出流对象 cout 为例,说明使用操纵符进行的输出格式化控制。,例8-4:使用操纵符 dec、oct、hex 、setiosflags() 。,例8-5:使用操纵符设置输出域宽、对齐方式和填充字符等。,例8-6:使用操纵符控制浮点数的输出。,8.3 文件操作,1、所谓“文件”:一般指存储在外部介质(磁盘、磁带、光盘等)上数据的集合。,3、在磁盘上保存的信息是按文件的形式组织的,每个文件都对应一个文件名,并且属于某个物理盘或逻辑盘的目录层次结构中一个确定的目录之下。,2、数据的输入和输出除了可以在键盘和显示器上进行外,还可 以在磁盘
15、上进行。,8.3.1 文件的概念,磁盘是外部存储器,能够永久保存信息,并能够被重新读写和携 带使用。所以若用户需要把信息保存起来,以便下次使用,则必须把 它存储到外存磁盘上。,一个文件名由文件主名和扩展名两部分组成:,4、在C+程序中使用的保存数据的文件按存储格式分为两种类型,即:字符格式文件(字符文件)和内部格式文件(字节文件)。,(1)字符文件又称为ASCII码文件、文本文件。,(2)字节文件又称为二进制文件。,文件主名:是由用户命名的一个有效的C+标识符,一般不超过8个字符。,文件扩展名:是由用户命名的、13个字符组成的、有效的C+标识符。通常用来区分文件的类型。,在字符文件中,每个字节
16、单元的内容为字符的ASCII码,被读出后能够 直接送到显示器或打印机上显示或打印出对应的字符,供人们直接阅读。,在字节文件中,文件内容是数据的内部表示,是从内存中直接复制过来的。,对于字符信息,数据的内部表示就是ASCLL码表示,所 以在字符文件和在字节文件中保存的字符信息没有差别。,对于数值信息,数据的内部表示和ASCLL码表示截然不同,所以在字符文件和在字节文件中保存的数值信息也截然不同。,当建立的文件主要是为了进行数据处理时,则适宜建立成字节文件,以节省存储空间和提高输入输出速度。,当建立的文件主要是为了输出到显示器或打印机供人们阅读,或者是为了供其他软件使用时,则适宜建立成字符文件。,
17、内部表示(二进制形式),ASCLL码表示,如:短整型数 1069,5、C+系统把各种外部设备也看作为相应的文件。如把标准输入设备键盘和标准输出设备显示器看作为标准输入输出文件,其文件名(又称设备名)为 con。,6、无论是字符文件还是字节文件,在访问它之前都要定义一个文件流类的对象,并用该对象打开它,以后对该对象的访问操作就是对被它打开文件的访问操作。对文件操作结束后,再用该对象关闭它。,对文件的访问操作包括输入和输出两种:,输入操作:是指从外部文件向内存变量输入数据。用于输入操作的文件称为输入文件。,输出操作:是指把内存变量或表达式的值写入到外部文件中。用于输出操作的文件称为输出文件。,7、
18、一个文件中保存的内容是按字节从数值 0 开始顺序编址的,文件开始位置的字节地址为 0,文件内容的最后一个字节的地址为 n-1(假定文件长度为 n),文件最后存放的文件结束符的地址为 n。,8、对于每个打开的文件,都存在着一个文件指针,初始指向一个隐含的位置,该位置由具体打开方式决定。,9、在程序中使用文件时,首先要在开始包含# include 命令。然后定义所需要的文件流对象,并用该对象调用 open 成员函数打开一个文件。,open 成员函数的声明格式为:,void open(const char * fname,int mode);,其中:,fname :用于指向要打开文件的文件名字符串,
19、该字符串内可以带有盘符和路径名,若省略盘符和路径名则隐含为当前盘和当前路径。,mode :用于指定文件的打开方式,对应的实参是 ios 类中定义的 open_mode 枚举类型中的枚举常量,或由这些枚举常量构成的按位或表达式。,open_mode 枚举类型中的每个枚举常量的含义如下:,ios:in / 使文件只用于数据输入,即从中读取数据。,ios:out / 使文件只用于数据输出,即向它写入数据。,ios:ate / 使文件指针移至文件尾,即最后位置。,ios:app / 使文件指针移至文件尾,并只允许向文件尾/ 输出(即追加)数据。,ios:trunc / 若打开的文件存在,则清除其全部内
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 PPT
