第七章C的输入输出流课件

上传人:我*** 文档编号:141293598 上传时间:2020-08-06 格式:PPT 页数:54 大小:167.50KB
返回 下载 相关 举报
第七章C的输入输出流课件_第1页
第1页 / 共54页
第七章C的输入输出流课件_第2页
第2页 / 共54页
第七章C的输入输出流课件_第3页
第3页 / 共54页
第七章C的输入输出流课件_第4页
第4页 / 共54页
第七章C的输入输出流课件_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第七章C的输入输出流课件》由会员分享,可在线阅读,更多相关《第七章C的输入输出流课件(54页珍藏版)》请在金锄头文库上搜索。

1、第七章 C+的I/O流类库,7.1 C+为何建立自己的输入输出系统,C+除了完全支持C 语言的输入输出系统外,还定义了一套面向对象的输入输出系统。为什么C +还要建立自己的输入输出系统呢?C 语言的输入输出系统不支持用户自定义的对象,如: Struct my_struct int i; float f; char *str; s; 对此结构类型,在C语言中下面的语句是不能接受的: printf(“%my_struct”,s); 因为printf( )函数只能识别系统预定义的类型,而没有办法对新的数据类型进行扩充.。用C+的输入输出系统,就可以通过重载“”运算符来解以上问题。 C+的类机制允它建

2、立一个可扩展的输入输出系统,它可以通过修改和扩展来加入用户自定义类型及相应操作。,1,7.2 C+的流及流类库,7.2.1 C+的流 输入输出是一种数据传递操作,它可以看作字符序列在主机与外部介质 之间的流动。 流(stream)为从源(或生产者)到目的(或消费者)的数据流的引用。 流具有方向性: 与输入设备(如键盘)相联系的流称为输入流; 与输出设备(如屏幕)相联系的流称为输出流; 与输入输出设备(如磁盘)相联系的流称为输入输出流。 C+中包 含几个预定义的流 : 标准输入流 cin 与标准输入设备相关联 标准输出流 cout 与标准输出设备相关联 非缓冲型标准出错流 cerr 与标准错误输

3、出设备相关联(非缓冲方式) 缓冲型的标准出错流 clog 与标准错误输出设备相关联(缓冲方式) 在缺省情况下,指定的标准输出设备是显示终端,标准输入设备是键盘。 在任何情况下(有时用户 把标准输出设备定向为其它设备),指定的标准错误输出设备总是显示终端。 cerr“The average cannot be computed.n”;,2,7.2.2 流类库,C+流类库是用继承方法建立起来的一个输入输出类库。它具有两个平行的基类:streambuf 类, ios 类。所有其它的流类都是从它们直接或间接地派生出来的。使用C+的流类库,程序中可能应包含的头文件: iostream.h strstre

4、am.h fstream.h iomanip.h 1. streambuf 类,streambuf,filebuf,strstreambuf,conbuf,派生,3,2. ios 类,ios,fstreambase,strstreambase,ostream,istream,istrstream,ofstream,ostrstream,constream,ifstream,fstream,istream_withassign,ostream_withassign,iostream_withassign,strstream,iostream,4,7.3输入输出的格式控制,7.3.1 用ios 类

5、的成员函数进行格式控制 ios类中有几个成员函数可以用来对输入输出进行格式控制。 主要控制 状态标志字、域 宽、填充字符及输出精度。 1. 状态标志字 状态标志存放在数据成员 long x_flags 中。ios 类 public 中定义了一个枚举,它的每个成员可以分别定义状标志字的一个位,每一位都称为一个状标志位。,5,.,这个枚举 定义 如下: enum 0000 0000 0000 0001 skipws =0 x0001,跳过输入中的空白,可用于输入 left =0 x0002,左对齐输出,可用于输出 right =0 x0004,右对齐输出,可用于输出 internal =0 x00

6、08,在符号位和基指示符后填入字符,可用于输出 dec =0 x0010,转换基数为十进制,可用于输入或输出 oct =0 x0020,转换基数为八进制,可用于输入或输出 hex =0 x0040,转换基数为十六进制,可用于输入或输出 showbase =0 x0080,在输出时显示基指示符,可于输入或输出 showpoint =0 x0100,在输出时显示小数点,可用于输出 uppercase =0 x0200,十六进制输出时,表示制式的和表示数值的字符一律为大写 ,可用于输出 showpos =0 x0400,正整数前显示”+”符号,可用于输出 scientific =0 x0800,用科

7、学表示法显示浮点数,可用于输出 fixed =0 x1000,用定点形式显示浮点数,可用于输出 unitbuf =0 x2000,在输出操作后立即刷新所有流,可用于输出 stdio =0 x4000,在输出操作后刷新stdout 和stderr,可用于输出 ;,6,2,x_flags取以上枚举值的并存,即x_flags上的每一位(长整数为16位)中的0 1相当于一个枚举值。例如 x_flags 中放 0 x0011 或 17即为 0000 0000 0001 0001 相当于 0 x0001 与 0 x0010 之并 skipws(0 x0001) 0000 0000 0000 0001 de

8、c (0 x0010) + 0000 0000 0001 0000 x_flags (0 x0011) 0000 0000 0001 0001,7,2.ios类中用于控制输入输出格式的成员函数 函数原型 功能 long ios:setf(long flags); 设置状态标志flags long ios:unsetf(long flags); 清除状态标志,并返回前标志 long ios:flags(); 测试状态标志 long ios:flags(long flags); 设置标志flags,并返回前标志 int ios:width(); 返回当前的宽度设置值 int ios:width(i

9、nt w); 设置域宽w,返回以前的设置 int ios:precision(int p); 设置小数位数p返回以前的小数位数 char ios:fill(); 返回当前的填充字符 char ios:fill(char ch); 设置填充字符ch返回当前的填充字符,8,(1)设置状态标志,设置状态标志,即是将某一状态标志位置“1”,可使用setf()函数 其一般的调用格式为:流对象.setf(ios:状态标志); 例7.1 #include main() istream cin; /对象cin可不定义 ostream cout; /对象cout可不定义 cin.setf(ios:shipws)

10、; /键盘输入时跳过输入空白 cout.setf(ios:left); /设置输出左对齐 cout.setf(ios:showpos | ios:sciengific);/中间用运算符 “|”分隔 cout567“ ” 567.89endl; 设置showpos使得每个正数前添加“+”号, 设置sciengific使 浮点数按科学表示法 (指数形式)进行显示,输出结果: +567 +5.678900e02 注意:要设置多项标志时,中间用或运算符 “|” 分隔。,9,(2)清除状态标志,清除某一状态标志,即是将某一状态标志位置”0”,可使用unseft()函数,使用时的调用格式与setf()相同

11、。 (3)取状态标志 取一个状态标志,可使用 flags()函数。flags()函数有不带参数与带 参数两 种形式:ling ios :flags(); 用于返回当前的状态 标志字; ling ios :flags (liog flag); 返回当前的状态 标志字后,再者将状态标志字设置成flag(参数)。 flags(liog flag)函数与setf(liog flags)函数的差别在于:setf()函数是在原有的基础上追加设定的,而flags()函数是用 新设定覆盖以前的状态标志字。 例 7.2 几个成员函数的使用 方法 #include void showflags(long f) /

12、输出状态标志字函数 long i; for(i=0 x8000;i;i=i1)/用右移方法使i中的值为”1”的位不断右移 if (i ,10,接1 例 7.2,void main() long f; cout.setf(ios:unitbuf|ios:skipws); f=cout.flags(); /取当前状态标志字 showflags(f); /显示状态标志字 cout.setf(ios:showpos|ios:scientific); /追加状态 标志位 f=cout.flags(); showflags(f); cout.unsetf(ios:scientific); /从状态标志字中

13、去掉sciengific f=cout.flags(); showflags(f); f=cout.flags(ios:oct); /重新设置状态标志字 showflags(f); /显示设置前的状态标志字 f=cout.flags(); /取设置 后的状态标志字 showflags(f); /显示设置后的状态标志字 ,11,程序运行结果为;0010000000000001 (1)0010110000000001 (2) 0010010000000001 (3)0010010000000001 (4)0000000000100000 (5),(4)设置域宽,域宽主要用来控制输出,在ios 类中

14、域 宽存放在数据成员int x_width中,设置域宽的成员函数有两个,其一般格式为:int ios :width(); 返回当的域宽值 int ios :width(int w); 设置域宽,并返回原来的域 宽 (5)设置输出的精度 精度用来控制浮点数的输出显示精度,在ios类中用数据成员int x_precision来存放精度,设置精度的成员函数的一般格式为: int ios:precision(int p); 重新设置浮点数所需小数的位数,并返回设置前的位数 (6)填充字符 填充字符的作用是:当输出值不满域宽时用填充字符来填充,缺省情况下填充字符为空格,所以在使用填充字符函数时,必须与w

15、idth()函数相配合,否则就没有意义,在ios类中用数据成员x_fill来存放填充字符。填充字符的成员函数有两个,其一般形式为: char ios :fill(); 返回当的填充字符 char ios :fill(char ch); 用ch重新设置填充字符,并返回设置前的填充字符。,12,例 7.3,#include void main() cout”x_width=”cout.width()endl;cout”x_fill=”cout.fill()endl;cout”x_precision=”cout.precision()endl;cout123” “123.45678endl;cout”-n”;cout”*x_width=10,x_fill= ,x_precision=7*n”;cout.width(10);cout.precision(7);cout123 ” “123.45678” “

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号