16:38:2 第十一章输入/输出流 本章主要内容 1.C++中的输入/输出概述 概念理解 2.C++中的流类库和流对象 了解 3.格式化输入/输出 掌握 4.流操作错误的检测 -掌握 5.用流对象进行文件操作 重点熟练掌握
16:38:22 第十一章 输入/输出流 本章主要内容 1. C++中的输入/输出概述 -- 概念 理解 2. C++中的流类库和流对象 -- 了解 3. 格式化输入/输出 -- 掌握 4. 流操作错误的检测 -- 掌握 5. 用流对象进行文件操作 -- 重点 熟练掌握
§1C++的输入/输出概述 C++支持两种方式的输入/输出 >兼容C语言的方式 调用C语言的 scanf0、 printf0等库函数 使用流对象的方式 C+中把数据从一个对象向另外一个对象的流动抽象成流 ■流对象一般与一个文件相关联,使用流对象进行输入相 当于从文件中读取数据存放于变量或对象中;使用流对 象进行输出,相当于把要输出的数据写入文件中 流妤比管道,从一端放进什么数据,从另一端就能取出 什么数据 流提供了统一的输入/输出操作: 使用流对象进行输入时,从流对象中取出数据的操作称 为提取操作,格式为:流对象>变量 使用流对象进行输出时,把数据添加进流对象中的操作 称为插入操作,格式为:流对象<<数据;
16:38:22 §1 C++的输入/输出概述 ➢C++支持两种方式的输入/输出 ➢兼容C语言的方式 调用C语言的scanf()、printf()等库函数 ➢使用流对象的方式 ▪ C++中把数据从一个对象向另外一个对象的流动抽象成流 ▪流对象一般与一个文件相关联,使用流对象进行输入相 当于从文件中读取数据存放于变量或对象中;使用流对 象进行输出,相当于把要输出的数据写入文件中 ▪流好比管道,从一端放进什么数据,从另一端就能取出 什么数据 ▪ 流提供了统一的输入/输出操作:> 使用流对象进行输入时,从流对象中取出数据的操作称 为提取操作,格式为:流对象 >> 变量; 使用流对象进行输出时,把数据添加进流对象中的操作 称为插入操作,格式为:流对象 << 数据;
插入运算符与提取运算符可以分别串联使用 例:cin>a>>b>c>d cout>具有智能,能够自动判断其后数据项的类型,并 采用相应的类型进行输出或输入 cin和cout是系统预定义的流对象,分别与键盘和显示器 相关联 C++中的流既提供了低级的I/0功能,也提供了高级的I/0 功能 低级I/0把一切数据看做是无格式的字节序列(字节流), 对字节序列不做解释,可用于实现高速大容量的数据传输 高级I/0不把数据看做是字节流,而把字节序列解释为各 种预定义的或用户自定义的类型的数据,有一定格式
16:38:22 ➢插入运算符与提取运算符可以分别串联使用 例:cin >> a >> b >> c >> d; cout >输入时,用户从键盘输入的多个数据项之间可以用 空格、Tab或回车分隔 ➢>具有智能,能够自动判断其后数据项的类型,并 采用相应的类型进行输出或输入 ➢cin和cout是系统预定义的流对象,分别与键盘和显示器 相关联 ➢C++中的流既提供了低级的I/O功能,也提供了高级的I/O 功能 ➢低级I/O把一切数据看做是无格式的字节序列(字节流), 对字节序列不做解释,可用于实现高速大容量的数据传输 ➢高级I/O不把数据看做是字节流,而把字节序列解释为各 种预定义的或用户自定义的类型的数据,有一定格式
§2流类库与流对象 C艹的流类库是用继承机制建立起来的一个输入/输出类库 主要有两个平行的基类: streambuf和ios 它们是所有流类的基类 streambuf filebuf strstreambuf stdiobuf 1 > streambuf类主要负责缓冲区的管理,提供对缓冲区的低 级操作,如设置缓冲区大小、从缓冲区中提取字节、把字 节插入缓冲区等 > filebuf类提供文件缓冲区的管理 > strstreambuf的对象使用字符串保存字符序列,提供在内 存中提取和插入数据的缓冲区管理 > stdiobuf提供标准I/0文件的缓冲区管理
16:38:22 §2 流类库与流对象 ➢C++的流类库是用继承机制建立起来的一个输入/输出类库 ➢主要有两个平行的基类:streambuf 和 ios 它们是所有流类的基类 streambuf filebuf strstreambuf stdiobuf ➢streambuf类主要负责缓冲区的管理,提供对缓冲区的低 级操作,如设置缓冲区大小、从缓冲区中提取字节、把字 节插入缓冲区等 ➢filebuf类提供文件缓冲区的管理 ➢strstreambuf的对象使用字符串保存字符序列,提供在内 存中提取和插入数据的缓冲区管理 ➢stdiobuf提供标准I/O文件的缓冲区管理
16:38:22 ≯ios是抽象基类,提供输入/输出所需的公共操作。类中包 含一指向 streambuf类对象的指针,并提供进行格式化I/0和 设置文件模式所需的枚举常量,和对I/0错误的处理操作 10S istream os tream ifstream istream-withassign istrstream ofstream lostream-withassign los trstream 1os tream fstream strstream stdiostream istream-类提供了大部分输入操作,并重载了>>运算符 ifstream文件输入流类,其对象与一个文件关联,用于从 该文件中输入数据 istrstream字符串输入流类,用于从其对象中提取数据 istream_withassign:预定义对象cin所属的流类,重载 了赋值运算符=
16:38:22 ➢ios是抽象基类,提供输入/输出所需的公共操作。类中包 含一指向streambuf类对象的指针,并提供进行格式化I/O和 设置文件模式所需的枚举常量,和对I/O错误的处理操作 ➢istream类提供了大部分输入操作,并重载了 >> 运算符 ios istream ostream ifstream istream_withassign istrstream ofstream ostream_withassign ostrstream iostream fstream strstream stdiostream ➢ifstream文件输入流类,其对象与一个文件关联,用于从 该文件中输入数据 ➢istrstream字符串输入流类,用于从其对象中提取数据 ➢istream_withassign:预定义对象cin所属的流类,重载 了赋值运算符 =
≯ ostream类及其派生类提供流的各种格式化、非格式化输 出操作,对所有系统预定义的输出流重载插入运算符 ofstream文件输出流类,其对象与一个文件关联,用于向 该文件中插入数据 ostrstream字符串输出流类,用于把数据插入到一个该类 对象,由该类对象在内存中形成一个字符串 ostream- withassign类:系统预定义的流对象cout所属的 类,重載了赋值运算符
16:38:22 ➢ostream类及其派生类提供流的各种格式化、非格式化输 出操作,对所有系统预定义的输出流重载插入运算符 << ➢ofstream文件输出流类,其对象与一个文件关联,用于向 该文件中插入数据 ➢ostrstream字符串输出流类,用于把数据插入到一个该类 对象,由该类对象在内存中形成一个字符串 ➢ostream_withassign类:系统预定义的流对象cout所属的 类,重载了赋值运算符 =
C艹+推荐使用流对象的方式进行输入/输出操作,且提供了 4个预定义的流对象,分别是:cin、cout、cerr和clog cin:是 istream-withassign类的对象,标准输入流对象, 通常与标准输入设备(键盘)关联,可以被重定向 >cout:是 ostream- withassign类的对象,标准输出流对象, 通常与标准输出设备(显示器)关联,可以被重定向 cer:是 ostream- wi thassign类的对象,标准错误输出流 对象,使用语法与cout相似,但与监视器关联,内部无缓 冲区,不能被重定向 clog:是 ostream- withassign类的对象,标准错误输出流 对象,使用语法与cout相似,与监视器关联,内部有缓冲 区,不能被重定向 使用流类库和流对象时,必须要包含相应的头文件,并使用 命令 using namespace std;打开std名称空间
16:38:22 ➢C++推荐使用流对象的方式进行输入/输出操作,且提供了 4个预定义的流对象,分别是: cin、cout、cerr 和 clog ➢cin:是istream_withassign类的对象,标准输入流对象, 通常与标准输入设备(键盘)关联,可以被重定向 ➢cout:是ostream_withassign类的对象,标准输出流对象, 通常与标准输出设备(显示器)关联,可以被重定向 ➢cerr:是ostream_withassign类的对象,标准错误输出流 对象,使用语法与cout相似,但与监视器关联,内部无缓 冲区,不能被重定向 ➢clog:是ostream_withassign类的对象,标准错误输出流 对象,使用语法与cout相似,与监视器关联,内部有缓冲 区,不能被重定向 使用流类库和流对象时,必须要包含相应的头文件,并使用 命令using namespace std;打开std名称空间
16:38A9 §3格式化输入/输出 C艹+中的流支持两种方式的输入/输出格式控制 1.使用ios类的成员函数 2.使用操纵符 使用ios类的成员函数进行输入/输出格式控制 1.格式控制标志字 ios类中定义了一个成员变量,用于记录当前流的格式化 状态,该成员变量称为格式控制标志字 为了方便记忆,ios类中定义了一些格式控制枚举常量, 每个常量对应于一种输入/输出格式
16:38:22 §3 格式化输入/输出 ➢C++中的流支持两种方式的输入/输出格式控制 1.使用ios类的成员函数 2.使用操纵符 ➢使用ios类的成员函数进行输入/输出格式控制 1.格式控制标志字 ➢ios类中定义了一个成员变量,用于记录当前流的格式化 状态,该成员变量称为格式控制标志字 ➢为了方便记忆,ios类中定义了一些格式控制枚举常量, 每个常量对应于一种输入/输出格式
格式控制枚举常量 标志常量值 意义 I/0 ios:: skipws 0x0001 跳过输入的空白 ios:: left 0x0002 左对齐输出 ios: right 0x0004 右对齐输出 ios: internal_0x008在符号位或基指示符之后填充 I000 ios:: dec 0x0010 十进制格式输入/输出 I/0 10s::0ct 0x0020 八进制格式输入/输出 I/0 ios:: hex 0x0040 十六进制格式输入/输出 I/0 ios:: showcase 0x0080 输出中显示基指示符 ios:: showpoint 0x0100 输出时显示小数点 ios: uppercase0x0200十六进制输出时用大写字母显示 输出正数时显示“+” 0000 ios:: showpos 0x0400 os: scientific0x080输出时以科学计数法显示浮点数0 ios:: fixed 0x1000 定点形式显示浮点数 ios:: unitbuf 0x2000 插入操作后立即刷新流 0 ios: stdio0x4000插入操作后刷新流 stdio和 stderr0
16:38:22 ➢格式控制枚举常量 标志常量 值 意义 I/O ios::skipws 0x0001 跳过输入的空白 I ios::left 0x0002 左对齐输出 O ios:right 0x0004 右对齐输出 O ios:internal 0x0008 在符号位或基指示符之后填充 O ios::dec 0x0010 十进制格式输入/输出 I/O ios::oct 0x0020 八进制格式输入/输出 I/O ios::hex 0x0040 十六进制格式输入/输出 I/O ios::showbase 0x0080 输出中显示基指示符 O ios::showpoint 0x0100 输出时显示小数点 O ios::uppercase 0x0200 十六进制输出时用大写字母显示 O ios::showpos 0x0400 输出正数时显示“+” O ios::scientific 0x0800 输出时以科学计数法显示浮点数 O ios::fixed 0x1000 定点形式显示浮点数 O ios::unitbuf 0x2000 插入操作后立即刷新流 O ios::stdio 0x4000 插入操作后刷新流stdio和stderr O
2.ios类中控制输入/输出格式的成员函数 设置和返回标志字 1 ong flags(long1Fags):用参数1F1ags的值更新标志字 返回更新前的标志字 long flags0 cons t:返回标志字的值 设置标志字中的某些位 log setf(long1F1ags):设置参数F1ag指定的标志位, 返回更新前的标志字的值 10 ng setf(10ng1 Flags,10 ng MAsks):将参数 Masks指 定的标志位清0,并设置参数1F1ag指定的标志位,返回更 新产的标志字的值 清除标志字 long unset(long1F1ags):将参数1F1ags指定的标志位 清0,返回更新前的标志字的值
16:38:22 2.ios类中控制输入/输出格式的成员函数 ➢设置和返回标志字 long flags(long lFlags):用参数lFlags的值更新标志字, 返回更新前的标志字 long flags()const:返回标志字的值 ➢设置标志字中的某些位 log setf(long lFlags):设置参数lFlags指定的标志位, 返回更新前的标志字的值 long setf(long lFlags,long lMasks):将参数lMasks指 定的标志位清0,并设置参数lFlags指定的标志位,返回更 新产的标志字的值 ➢清除标志字 long unsetf(long lFlags):将参数lFlags指定的标志位 清0,返回更新前的标志字的值