C++程序设计--对象分册(第4章).ppt
《C++程序设计--对象分册(第4章).ppt》由会员分享,可在线阅读,更多相关《C++程序设计--对象分册(第4章).ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 输入输出流输入输出流 n本章学习重点掌握内容:本章学习重点掌握内容:n输入输出流类体系结构输入输出流类体系结构 n输入输出流的格式化输入输出流的格式化n输入输出流对象输入输出流对象n文本文件和二进制文件的输入和输出文本文件和二进制文件的输入和输出n综合应用实例综合应用实例12/26/20221第第4章章 输入输出流输入输出流 n4.1 输入输出流基本概念输入输出流基本概念 n4.2 输入输出流类体系输入输出流类体系 n4.3 I/O流操作流操作 n4.4 文件流和文件的输入输出文件流和文件的输入输出 n4.5 字符串流字符串流 n4.6 重载插入和提取运算符重载插入和提取运算符12
2、/26/202224.1 输入输出流基本概念输入输出流基本概念 1、流流 流是一种抽象,它负责在数据的流是一种抽象,它负责在数据的生产者生产者(程序(程序/文件)和数据的文件)和数据的消费者消费者(文件(文件/程序)之间建程序)之间建立联系,并管理数据的流动。立联系,并管理数据的流动。2、字节流、字节流 字节流分为字符流(也称文本流)和二进制流。字节流分为字符流(也称文本流)和二进制流。字符流在数据传输时需作转换,效率较低。但字符流在数据传输时需作转换,效率较低。但可以直接编辑,显示或打印。可以直接编辑,显示或打印。12/26/202234.1 输入输出流基本概念输入输出流基本概念 二进制流将
3、字节流的每个字节以二进制二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转方式解释,它在数据传输时不作任何转换,故效率高。但无法人工阅读,可移换,故效率高。但无法人工阅读,可移植性较差。植性较差。3、文件文件 文件是一般指存储在外部介质上数据的集合。文件是一般指存储在外部介质上数据的集合。计算机中的程序、数据、文档通常都组织成文计算机中的程序、数据、文档通常都组织成文件存放在外存储器中。件存放在外存储器中。12/26/202244.1 输入输出流基本概念输入输出流基本概念4、缓冲、缓冲 系统在主存中开辟的、用来临时存放输入输出系统在主存中开辟的、用来临时存放输入输出数据的区域
4、,成为输入输出缓冲区(简称缓冲数据的区域,成为输入输出缓冲区(简称缓冲区)。区)。5、命名空间、命名空间 命名空间,就是在程序的不同的模块中使用相命名空间,就是在程序的不同的模块中使用相同的名字表示不同的事物(实体)。目的是提同的名字表示不同的事物(实体)。目的是提供一种机制,使大程序的各个部分中因出现重供一种机制,使大程序的各个部分中因出现重名而导致冲突的可能性降到最低。名而导致冲突的可能性降到最低。12/26/202254.2 输入输出流类体系输入输出流类体系 C+为实现数据的输入和输出定义为实现数据的输入和输出定义了一个庞大的流类库,它包括的类主要了一个庞大的流类库,它包括的类主要有有i
5、os,istream,ostream,iostream,ifstream,ofstream,fstream等。类等。类istream和和ostream是是类类ios的公有派生类,分别提供输入和输的公有派生类,分别提供输入和输出操作。出操作。继承关系见下图继承关系见下图。12/26/202264.2.1 流类库流类库 12/26/202274.2.1 流类库流类库 C+I/O常用流类列表(常用流类列表(1)12/26/202284.2.1 流类库流类库C+I/O常用流类列表常用流类列表(2)12/26/202294.2.2 标准流对象标准流对象 C+语言在头文件语言在头文件 iostream.h
6、 中预定义了中预定义了 4个标个标准流类的对象:准流类的对象:n extern istream cin;/标准输入流对象标准输入流对象n extern ostreamcout;/标准输出流对象标准输出流对象n extern ostreamcerr;/标准错误流(非缓标准错误流(非缓冲)对象冲)对象n extern ostreamclog;/标准错误流对象标准错误流对象12/26/2022104.2.2 标准流对象标准流对象ncin 是是console input缩写。在默认的情况下,代表键缩写。在默认的情况下,代表键盘。盘。ncout 是是console output的缩写。在默认的情况下,的
7、缩写。在默认的情况下,代表显示器。代表显示器。ncerr和和clog 是是 console error和和console log的缩写。的缩写。在默认的情况下,代表显示器。这四个标准流中,在默认的情况下,代表显示器。这四个标准流中,cerr为非缓冲流,其余均为缓冲流。为非缓冲流,其余均为缓冲流。n输入就是从流中提取一个字节序列,输入就是从流中提取一个字节序列,C+用用“”运运算符表示提取,称为提取运算符。输出就是向流中插算符表示提取,称为提取运算符。输出就是向流中插入一个字节序列,用入一个字节序列,用“”运算符表示插入,称为插运算符表示插入,称为插入运算符。这两个运算符分别定义在类入运算符。这
8、两个运算符分别定义在类ostream和和istream中。中。12/26/2022114.2.2 标准流对象标准流对象【例例4.1】使用流使用流cout和和cerr实现数据的输出。实现数据的输出。#includevoid main(void)float a,b;cerr ab;if(b!=0)couta/b=a/bn;else cerr”除数为零除数为零!n”;12/26/2022124.3 I/O流操作流操作 I/O流的格式化。流的格式化。iomanip.h中预定义的格式控制符中预定义的格式控制符12/26/2022134.3 I/O流操作流操作n控制输出格式的流成员函数控制输出格式的流成员
9、函数 12/26/2022144.3 I/O流操作流操作n设置格式状态的格式标志设置格式状态的格式标志 12/26/2022154.3 I/O流操作流操作【例例4.2】用格式控制符用格式控制符setw、hex、dec指定输出数据指定输出数据的域宽和数制。的域宽和数制。#include#includevoid main(void)int a=256,b=128;cout setw(8)a”b=”bn;/Line1cout hexa”b=”decbn;/Line212/26/2022164.3 I/O流操作流操作【例例4.3】数据进制之间的转换。数据进制之间的转换。#include /因因ioma
10、nip.h中包含有中包含有iostream.h,所以该命令也可省略所以该命令也可省略#include void main()int x=30,y=300,z=1024;coutx y zendl;/按十进制输按十进制输出出 coutoctx y zendl;/按八按八进制输出进制输出 couthexx y zendl;/按十按十六进制输出六进制输出 12/26/2022174.3 I/O流操作流操作 coutsetiosflags(ios:showbase|ios:uppercase);/设置基指示符和数值中的字母大写输出设置基指示符和数值中的字母大写输出 coutx y zendl;/仍按仍
11、按十六进十六进 制输出制输出 coutresetiosflags(ios:showbase|ios:uppercase);/取消基指示符和数值中的字母大写输出取消基指示符和数值中的字母大写输出 coutx y zendl;/仍按仍按十六进制输出十六进制输出 coutdecx y zendl;/按十进制输出按十进制输出 其输出结果:30 300 102436 454 20001e 12c 4000X1E 0X12C 0X41e 12c 40030 300 102412/26/2022184.3 I/O流操作流操作【例例4.4】使用使用setw控制符为同一行中输出的不同数据控制符为同一行中输出的不
12、同数据 项分别指定宽度。项分别指定宽度。#include#includeusing namespace std;void main()double values=1.23,35.36,653.7,4258.24;char*names=Zoot,Jimmy,Al,Stan;for(int i=0;i4;i+)outsetw(6)namesisetw(10)valuesiendl;其输出结果:Zoot 1.23Jimmy 35.36Al 653.7Stan 4358.2412/26/2022194.3 I/O流操作流操作【例例4.5】使用使用cout的的width成员函数控制输出宽度为成员函数控制
13、输出宽度为10个字符宽,个字符宽,且按右对齐方式输出数值。且按右对齐方式输出数值。#include#includeusing namespace std;void main()double values=1.23,35.36,653.7,4258.24;char*names=Zoot,Jimmy,Al,Stan;for(int i=0;i4;i+)cout.width(10);cout.fill(*);coutvaluesiendl;其输出结果:*1.23*35.36*653.7*4358.2412/26/2022204.3 I/O流操作流操作【例例4.6】控制数据输出精度。控制数据输出精度。
14、#include#includeusing namespace std;void main()double values=1.23,35.36,653.7,4358.24;char*names=Zoot,Jimmy,Al,Stan;for(int i=0;i4;i+)coutsetiosflags(ios_base:left)setw(6)namesiresetiosflags(ios_base:left)setw(10)setprecision(1)valuesiendl;输出结果:Zoot 1Jimmy 4e+001Al 7e+002Stan 4e+00312/26/2022214.3 I
15、/O流操作流操作n输入输出流检测错误的输入输出流检测错误的操作操作【例例4.7】输入不正确的数据输入不正确的数据 时,导致程序出错。时,导致程序出错。#includevoid main(void)int i,s;char t80;couti;s=cin.rdstate();couts=sn;enum io_state goodbit=0 x00,eofbit =0 x01,failbit=0 x02,badbit =0 x04,hardfail=0 x80 ;int rdstate();int eof();int fail();int bad();int good();int clear(in
16、t flag=0);12/26/2022224.3 I/O流操作流操作while(s)cin.clear();cin.getline(t,80);couti;s=cin.rdstate();coutnum=i”很相像很相像。get函数在读入数据函数在读入数据时包括空白字符时包括空白字符。nGetline()函数。()函数。getline成员函数的功能成员函数的功能是允许从输入流中读取多个字符,并且允许是允许从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行字符),指定输入终止字符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止在读取完成后,从读取的内容中删除该终止字符。
17、字符。12/26/2022244.3.2 用流成员函数实现输入输出用流成员函数实现输入输出【例例4.8】put函数应用举例,有一个字符串函数应用举例,有一个字符串“ENGLISH”,要求按反序输出。,要求按反序输出。#include void main()char*p=ENGLISH;for(int i=6;i=0;i-)cout.put(*(p+i);cout.put(n);运行结果:运行结果:HSILGNE。12/26/2022254.3.2 用流成员函数实现输入输出用流成员函数实现输入输出【例例4.9】get函数应用举例,从键盘接收字符并输出。函数应用举例,从键盘接收字符并输出。#inc
18、ludevoid main()char ch;while(ch=cin.get()!=EOF)cout.put(ch);运行时输入:运行时输入:Abc xyz 123 则输出结果:则输出结果:Abc xyz 12312/26/2022264.3.2 用流成员函数实现输入输出用流成员函数实现输入输出【例例4.10】getline函数应用举例,为输入流指定一个终止字符。函数应用举例,为输入流指定一个终止字符。本程序连续读入一串字符,直到遇到字符本程序连续读入一串字符,直到遇到字符“t”时停止,字符个数时停止,字符个数最多不超过最多不超过80个。个。#includevoid main()char l
19、ine100;coutType a line terminated by t endl;cin.getline(line,81,t);coutline;coutch;n用完文件后,使用文件流对象的成员函数关闭文件。例用完文件后,使用文件流对象的成员函数关闭文件。例如:如:infile.close();12/26/2022294.4.1 用流成员函数实现输入输出用流成员函数实现输入输出n文件流类常用成员函数文件流类常用成员函数 12/26/2022304.4.1 用流成员函数实现输入输出用流成员函数实现输入输出n文件打开方式说明文件打开方式说明 12/26/2022314.4.4 文本文件的输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 对象 分册
限制150内