C程序设计输入输出流.pptx
《C程序设计输入输出流.pptx》由会员分享,可在线阅读,更多相关《C程序设计输入输出流.pptx(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1C程序设计程序设计(chn x sh j)输入输出流输入输出流第一页,共54页。2023/2/62第第4章章 输入输入(shr)/输出流输出流n n本章学习重点掌握内容:本章学习重点掌握内容:n n输入输出流基本知识输入输出流基本知识n n输入输出流类体系结构输入输出流类体系结构n nI/OI/O流操作的格式控制流操作的格式控制n n文件的输入输出文件的输入输出n n字符串流的使用字符串流的使用n n重载重载(zhn(zhn z z i)i)插入和提取运算符插入和提取运算符第1页/共54页第二页,共54页。2023/2/63第第4章章 输入输入(shr)输出流输出流 n n4.1 4.
2、1 输入输出流基本概念输入输出流基本概念n n4.2 4.2 输入输出流类体系输入输出流类体系n n4.3 I/O4.3 I/O流操作流操作n n4.4 4.4 件流和文件件流和文件(wnjin)(wnjin)的输入输出的输入输出n n4.5 4.5 字符串流字符串流n n4.6 4.6 重载插入和提取运算符重载插入和提取运算符n n4.7 4.7 综合应用实例综合应用实例第2页/共54页第三页,共54页。2023/2/644.1 输入输入(shr)输出流基本概输出流基本概念念1 1、流、流 流是一种抽象,它负责在数据的生产者(程序流是一种抽象,它负责在数据的生产者(程序/文件)和数据的消费者
3、(文件文件)和数据的消费者(文件/程序)之程序)之间建立联系,并管理数据的流动。间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个程序建立一个流对象,并指定这个(zh ge)(zh ge)流对象与某个文件对象建立连接,程序操作流流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。对象,流对象通过文件系统对所连接的文件对象产生作用。一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。入。第3页/共54页第四页,共54页。2023/2/654
4、.1 输入输入(shr)输出流基本概输出流基本概念念 2 2、字节流、字节流 字节流分为字符流(也称文本流)和二进制流。字节流分为字符流(也称文本流)和二进制流。字符流将字节流的每个字节按字符流将字节流的每个字节按ASCASC字符解释,缺字符解释,缺点:传输时需作转换,效率较低。如源程序文件和文本点:传输时需作转换,效率较低。如源程序文件和文本文件。优点:文件。优点:ASCASC字符是标准的,字符流可以直接编字符是标准的,字符流可以直接编辑辑(binj)(binj)、显示或打印,生的文件通行于各类计算机。、显示或打印,生的文件通行于各类计算机。二进制流将字节流的每个字节以二进制方式解释,二进制
5、流将字节流的每个字节以二进制方式解释,优点:传输时不作任何转换,故效率高。缺点:各类计优点:传输时不作任何转换,故效率高。缺点:各类计算机对数据的二进制存放格式各有差异,且无法人工阅算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。读,故二进制流产生的文件可移植性较差。第4页/共54页第五页,共54页。2023/2/664.1 输入输入(shr)输出流基本概输出流基本概念念 3 3、文件、文件(wnjin)(wnjin)文件文件(wnjin)(wnjin)一般是指存储在外部介质上数据的集合。一般是指存储在外部介质上数据的集合。计算机中的程序、数据、文档通常都
6、组织成文件计算机中的程序、数据、文档通常都组织成文件(wnjin)(wnjin)存放在外存储器中。由于输入输出设备具有字节流特征,存放在外存储器中。由于输入输出设备具有字节流特征,所以操作系统也把它们看作是文件所以操作系统也把它们看作是文件(wnjin)(wnjin)。为了便于区别,每个文件为了便于区别,每个文件(wnjin)(wnjin)都有自己的名字(称都有自己的名字(称为文件为文件(wnjin)(wnjin)名),程序可通过文件名),程序可通过文件(wnjin)(wnjin)名来使用名来使用文件文件(wnjin)(wnjin)。不同的计算机系统中文件不同的计算机系统中文件(wnjin)(
7、wnjin)名的组成规则有所不名的组成规则有所不同。同。第5页/共54页第六页,共54页。2023/2/674.1 输入输入(shr)输出流基本概输出流基本概念念4 4、缓冲、缓冲系统在主存中开辟系统在主存中开辟(kip)(kip)的、用来临时存放输入输出的、用来临时存放输入输出数据的区域,成为输入输出缓冲区(简称缓冲区)。数据的区域,成为输入输出缓冲区(简称缓冲区)。输入输出流有缓冲和非缓冲之分。对于非缓冲流,一输入输出流有缓冲和非缓冲之分。对于非缓冲流,一旦数据送入缓冲区,就立即处理;对于缓冲流,仅当旦数据送入缓冲区,就立即处理;对于缓冲流,仅当缓冲区满或当前送入的数据为新的一行字符时,系
8、统缓冲区满或当前送入的数据为新的一行字符时,系统才对流中的数据进行处理(称为刷新)。通常使用的才对流中的数据进行处理(称为刷新)。通常使用的是缓冲流,仅在特殊场合,才使用非缓冲流。是缓冲流,仅在特殊场合,才使用非缓冲流。第6页/共54页第七页,共54页。2023/2/684.1 输入输入(shr)输出流基本概输出流基本概念念5 5、命名空间、命名空间命名空间,就是在程序的不同的模块命名空间,就是在程序的不同的模块(m kui)(m kui)中使用相中使用相同的名字表示不同的事物(实体)。目的是提供一种机同的名字表示不同的事物(实体)。目的是提供一种机制,使大程序的各个部分中因出现重名而导致冲突
9、的可制,使大程序的各个部分中因出现重名而导致冲突的可能性降到最低。能性降到最低。作用是为了解决同一工程中命名冲突的问题。作用是为了解决同一工程中命名冲突的问题。在命名空间内部,可以使用其成员的名字。在命名空间在命名空间内部,可以使用其成员的名字。在命名空间的外部,就只能把某个实体的名字和命名空间的名称组的外部,就只能把某个实体的名字和命名空间的名称组合起来,表示该命名空间中的实体。合起来,表示该命名空间中的实体。一个程序中可以包含几个不同的命名空间。一个程序中可以包含几个不同的命名空间。第7页/共54页第八页,共54页。2023/2/694.2 输入输入(shr)输出流类体系输出流类体系4.2
10、.1 4.2.1 流类库流类库C+C+为实现数据为实现数据(shj)(shj)的输入和输出定义了一个庞大的流类库,它包括的类主的输入和输出定义了一个庞大的流类库,它包括的类主要有要有iosios,istreamistream,ostreamostream,iostreamiostream,ifstreamifstream,ofstreamofstream,fstreamfstream等。这些类中等。这些类中存在着继承关系。如图:存在着继承关系。如图:第8页/共54页第九页,共54页。2023/2/6104.2 输入输入(shr)输出流类体系输出流类体系 C+C+对文件的输入输出需要用到对文件的
11、输入输出需要用到ifstreamifstream和和ofstreamofstream类。类。实际编程时,通常用类实际编程时,通常用类iosios、istreamistream、ostreamostream、iostream iostream、fstreamfstream提供的公有接口提供的公有接口(ji k(ji k u)u)成员函数来进行输入输出。成员函数来进行输入输出。常见类图如表常见类图如表4-1.4-1.第9页/共54页第十页,共54页。2023/2/6114.2 输入输入(shr)输出流类体系输出流类体系n n4.2.2 4.2.2 标准流对象标准流对象n nC+C+语言在头文件语言
12、在头文件 iostream.h iostream.h 中预定义了中预定义了 4 4个标准流类的对个标准流类的对象象n n extern istream extern istream cin;cin;/标准输入流对象标准输入流对象n n extern ostream extern ostream cout;cout;/标准输出流对象标准输出流对象n n extern ostream extern ostream cerr;cerr;/标准错误流(非缓冲)对标准错误流(非缓冲)对象象n n extern ostream extern ostream clog;clog;/标准错误流标准错误流(缓冲
13、缓冲)对象对象n n 输入就是从流中提取一个字节序列,用输入就是从流中提取一个字节序列,用“”“”运算符表示提运算符表示提取,称为提取运算符。输出就是向流中插入一个字节序列,取,称为提取运算符。输出就是向流中插入一个字节序列,用用“”“”运算符表示插入,称为插入运算符。运算符表示插入,称为插入运算符。n n 这两个这两个(li(li n n )运算符分别定义在类运算符分别定义在类ostreamostream和和istreamistream中。中。第10页/共54页第十一页,共54页。2023/2/6124.2 输入输出输入输出(shch)流类体流类体系系n nC+C+语言提供的流语言提供的流I
14、/OI/O的一个明显的特点是程序设计人员可的一个明显的特点是程序设计人员可以不考虑数据类型。如:以不考虑数据类型。如:n ncoutacoutbcinb表示输入变量表示输入变量b b的值。的值。尽管这里的变量尽管这里的变量a a和和b b的数据类型可能是的数据类型可能是intint、charchar、floatfloat等。等。然而,在然而,在C C语言当中,必须明确表示语言当中,必须明确表示a a和和b b的数据类型。而且的数据类型。而且在在C C语言中使用语言中使用printfprintf和和scanfscanf进行输入输出时,往往不能保进行输入输出时,往往不能保证输入输出的数据是可靠的和
15、安全的。证输入输出的数据是可靠的和安全的。n nC+C+输入输出中,编译系统对数据类型进行了严格的检查,输入输出中,编译系统对数据类型进行了严格的检查,凡是类型不正确凡是类型不正确(zhngqu)(zhngqu)的数据不能通过编译系统。的数据不能通过编译系统。第11页/共54页第十二页,共54页。2023/2/6134.2 4.2 输入输入输入输入(shr)(shr)输出流类体系输出流类体系输出流类体系输出流类体系n n【例【例4.14.1】使用流】使用流coutcout和和cerrcerr实现数据的输出实现数据的输出(shch)(shch)。n n#include#includen nusi
16、ng namespace std;using namespace std;n nint main(void)int main(void)n n n n float a,b;float a,b;n n cerr”cerr ab;cinab;n n if(b!=0)couta/b=a/bn;if(b!=0)couta/b=a/bn;n n else cerr”else cerr”除数为零除数为零!n”;!n”;n n return 0;return 0;n n 第12页/共54页第十三页,共54页。2023/2/6144.2 输入输入(shr)输出流类体系输出流类体系 对于输入提示信息或输出结果而
17、言,对于输入提示信息或输出结果而言,coutcout、cerrcerr和和clogclog的用法相的用法相同,但作用不同。同,但作用不同。cerrcerr的作用是向标准的作用是向标准(biozh(biozh n)n)错误设备错误设备(standard error device)(standard error device)输出有关出错信息。输出有关出错信息。coutcout流通常是传送到显流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件,而示器输出,但也可以被重定向输出到磁盘文件,而cerrcerr流中的信息流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错只能在显示
18、器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerrcerr,cerrcerr流中的信息是用户根据需要指定的。流中的信息是用户根据需要指定的。clogclog流对象也是标准流对象也是标准(biozh(biozh n)n)错误流,它是错误流,它是console logconsole log的缩写。它的作用和的缩写。它的作用和cerrcerr相同,相同,都是在终端显示器上显示出错信息。不同的是都是在终端显示器上显示出错信息。不同的是cerrcerr不经过缓冲区,不经过缓冲区,直接向显
19、示器上输出有关信息,而直接向显示器上输出有关信息,而clogclog中的信息存放在缓冲区中,中的信息存放在缓冲区中,缓冲区满后或遇缓冲区满后或遇endlendl时向显示器输出。时向显示器输出。第13页/共54页第十四页,共54页。2023/2/6154.3 I/O流操作流操作(cozu)4.3.1 I/O4.3.1 I/O流的格式化流的格式化 格式化输入输出仅用于文本流,而二进制流是格式化输入输出仅用于文本流,而二进制流是原样原样(yun yn(yun yn)输入输出,不必做格式化转换。对输输入输出,不必做格式化转换。对输出格式的控制,可以用控制符方式,也可以用输出出格式的控制,可以用控制符方
20、式,也可以用输出流的成员函数来实现,两者的作用是相同的。流的成员函数来实现,两者的作用是相同的。1 1使用控制符输出格式。使用控制符输出格式。“iomanip.h”“iomanip.h”中预定义了中预定义了1313个格式控制符,用于控制输入输出数据的格式,如个格式控制符,用于控制输入输出数据的格式,如表表4-24-2所示。使用格式控制符,在程序中要包含所示。使用格式控制符,在程序中要包含iomanip.hiomanip.h头文件。头文件。第14页/共54页第十五页,共54页。2023/2/6164.3 I/O流操作流操作(cozu)2用用cout的成员函数控制输出格式。除了的成员函数控制输出格
21、式。除了(ch le)可以用控制符控制输出格式外,还可以通过调用可以用控制符控制输出格式外,还可以通过调用cout中的成员函数来控制输出格式。表中的成员函数来控制输出格式。表4-3列出了格式控制函数。列出了格式控制函数。表表4-4列出了格式控制函数(表列出了格式控制函数(表4-3)中用到的格式标志。这些标志被定义在)中用到的格式标志。这些标志被定义在ios_base 类中。类中。【例【例4.2】用格式控制符】用格式控制符setw、hex、dec指定输出数据的域宽和数制。指定输出数据的域宽和数制。#include#includeusing namespace std;第15页/共54页第十六页,
22、共54页。2023/2/6174.3 I/O流操作流操作(cozu)int main(void)int main(void)int a=256,b=128;int a=256,b=128;cout setw(8)a”b=”bn;/Line1cout setw(8)a”b=”bn;/Line1cout hexa”b=”decbn;/Line2cout hexa”b=”decbn;/Line2return 0;return 0;【例【例4.34.3】数据进制之间的转换。】数据进制之间的转换。#include /#include /因因iomanip.hiomanip.h中包含有中包含有iostre
23、am.hiostream.h,所,所以该命令以该命令(mng lng)(mng lng)也可省略也可省略#include#include using namespace std;using namespace std;第16页/共54页第十七页,共54页。2023/2/6184.3 I/O流操作流操作(cozu)int main()int x=30,y=300,z=1024;coutx y zendl;/按十进制输出 coutoctx y zendl;/按八进制输出 couthexx y zendl;/按十六进制 输出 coutsetiosflags(ios:showbase|ios:uppe
24、rcase);/设置基指示符和数值中的字母大写(dxi)输出 coutx y zendl;/仍按十六进制输出 coutresetiosflags(ios:showbase|ios:uppercase);/取消基指示符和数值中的字母大写(dxi)输出 coutx y zendl;/仍按十六进制输出 coutdecx y zendl;/按十进制输出第17页/共54页第十八页,共54页。2023/2/6194.3 I/O流操作流操作(cozu)return 0;运行(ynxng)结果:30 300 102436 454 20001e 12c 4000X1E 0X12C 0X41e 12c 40030
25、 300 1024第18页/共54页第十九页,共54页。2023/2/6204.3.2 用流成员函数实现输入输出用流成员函数实现输入输出1put函数。函数。put函数把一个字符写到输入流中,下面函数把一个字符写到输入流中,下面(xi mian)两个语句默认是相同的,但第二个受该流的格式化参量的影响:两个语句默认是相同的,但第二个受该流的格式化参量的影响:cout.put(A)/精确地输出一个字符精确地输出一个字符cout”很相像,主要的不同点是很相像,主要的不同点是get函数在读入数据时包括空白字符,而提取运算符在默认情况下拒绝接受空白字符。函数在读入数据时包括空白字符,而提取运算符在默认情况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 输入输出
限制150内