1. 首页
  2. 文档大全

第14章输入输出和文件

上传者:5****1 2022-07-08 03:13:56上传 PPT文件 565.01KB
第14章输入输出和文件_第1页 第14章输入输出和文件_第2页 第14章输入输出和文件_第3页

《第14章输入输出和文件》由会员分享,可在线阅读,更多相关《第14章输入输出和文件(57页珍藏版)》请在文档大全上搜索。

1、第14章 输入输出和文件 输入和输出是人和计算机交互的手段,也是计算机生命所在,试想,如果一台机器既不接受任何形式的指令,也不给出任何形式的结果,这台机器的存在就没有了意义。几乎每个程序都要用到输入和输出,本书给出的示例代码中,显示结果是依靠cout,输入信息是依靠cin,这两个都是C+标准库中ostream类和istream类中提供了对象,此外,C+标准库还提供了其他类和对象,不仅仅可实现向屏幕输出、从键盘读入,还可以写入文件、从文件读入,本章重点讨论输入输出和文件相关内容。14.1 输入输出概述 C+语言不具备内部输入输出能力,需要借助外部I/O包来完成,将输入输出具体要完成的操作留给编译

2、器来做,这样做的目的是为了最大限度地保证语言与平台的无关性。因为输入输出功能都是与操作系统相关的,如果C+为某种操作系统实现内部输入输出功能,那它也就被限制在这个操作系统上了,举例来说,如果C+为windows内部实现了输入输出命令,那么该命令就只能用在windows环境下,在其他系统,如linux下将完全不起作用,这大大限制了程序的可移植性。 首先,先让我们一起来了解几个概念。14.1.1 什么是文件使用电脑时,经常遇到“文件”这个词,一般意义的理解是“存放在存储介质上的一组信息”,但从程序设计的角度看,文件的概念要宽泛得多。文件的准确定义为“存放在外部介质上的以文件名为标识的数据的集合”,

3、此处的外部介质不仅仅包括磁盘,还包括设备,比如键盘、显示器以及打印机等。凡是起到输入输出作用,与CPU直接或间接打交道的一组信息集合都是文件。每个文件都以文件名为标识,I/O设备的文件名是系统定义的,如:COM1或AUX第一串行口,附加设备COM2第二串行口,此外,还可能有COM3、COM4等CON控制台(console),键盘(输入用)或显示器(输出用)LPT1或PRN第一并行口或打印机LPT2第二并行口,还可能有LPT3等NUL空设备14.1.2 流关于“流”,可以学院派地解释为“流是(表达)读写数据的一种可移植的方法,它为一般的I/O操作提供了灵活有效的手段。一个流是一个由指针操作的文件

4、或者是一个物理设备,而这个指针正是指向了这个流。”就C+程序而言, I/O操作可以简单地看作是从程序移进或移出字节,这种搬运的过程便称为流(stream)。程序只需要关心是否正确地输出了字节数据,以及是否正确地输入了要读取字节数据,特定I/O设备的细节对程序员是隐藏的。C+中,所有的信息都是以0、1编码,所以,输出的字节(也就是0、1序列)代表什么,输入的源头或输出的目的都不是流所关心的内容,流的实质在于是否正确完成了运输任务,形象的表述如所示,左侧是输入流而右侧是输出流。14.1.3 缓冲区 大家可能已对硬件缓冲区比较熟悉,为了匹配计算机快速设备和慢速设备间的通信步伐,计算机中大量使用了硬件

5、缓冲区,如CPU中的Cache,内存也可以看成是一种缓冲区,用以高速CPU处理和相对瓶颈的硬盘存储速度之间的矛盾。 流是传输信息的一种逻辑表示,是具有缓冲作用的接口,同样有缓冲区的需求,但这里的缓冲区是一种逻辑概念,和物理设备中的缓冲区有所不同。通常,流的缓冲区是用作中介的内存块,是从设备传递到程序或者由程度传递给设备的临时存储池(pool),下面从文件输入和文件输出的角度来具体看一下缓冲区的作用。14.1.4 重定向 标准的输出和输入设备通常指的是显示器和键盘,但一些操作系统支持重定向,这使得标准输入和输出能被替换,比如说,一个程序的信息原本是要输出到屏幕上的,可通过操作系统的支持,在不改变

6、程序的前提下,便可用让信息输出到其他位置,以DOS系统来举例:#include using namespace std;int main()coutHello,txt will be shown on screen;return 0;14.1.5 3种输入输出机制C+语言的输入输出机制包含3层,前两层是从传统的C语言继承而来,分别是底层I/O和高层I/O,第3层是C+中增添的流类库,这是本章讨论的重点。(1)底层I/O:底层I/O依赖于操作系统来实现,调用操作系统的功能对文件进行输入输出处理,具有较高的速度。底层I/O将外部设备和磁盘文件都等同于逻辑文件,采用相同的方法进行处理,一般过程为“打

7、开文件”、“读写文件”,“关闭文件”,这些是通过一组底层I/O函数来完成的,这些函数定义在头文件io.h中。(2)高层I/O:高层I/O是在底层I/O的基础上扩展起来的,仍旧将外部设备和磁盘文件统一处理,但处理的方式更为灵活,提供的一组处理函数定义在头文件stdio.h中,新的C+标准头文件为,提供的这些函数大体可分为两类:一般文件函数(外部设备和磁盘文件)和标准I/O函数。(3)流类库:除了从C语言中继承了上述两种I/O机制外,C+还特有一种输出机制:流类库(即iostream类库),这是C+所特有的,iostream类库为内置类型类型对象提供了输入输出支持,也支持文件的输入输出,另外,类的

8、设计者可以通过运算符重载机制对iostream库的扩展,来支持自定义类型的输入输出操作。14.2 高层I/O C+中的高层I/O是从C继承而来,使用头文件,本节先从其标准输入输出看起,再来学习高层I/O中文件的操作,原理上说,流类库已经能胜任几乎所有的输入输出处理,但高层I/O的介绍很有必要,这有助于读者阅读原有的代码。14.2.1 标准输出函数printf注意:这里使用的概念是函数,而不是对象,注意printf和cout的不同,这也许就是C和C+思维方式的不同。printf函数用于将字节流复制到标准输出设备(通常是屏幕),其使用方式十分灵活,有两个突出优点,一是其参数表的长度是可变的,二是其

9、转换说明和格式控制十分简单,printf的参数表分为两部分:控制字符串和参数表,基本格式为:int printf(const char*,para1,para2);进一步解释前,先来看示例代码14-1:#include /使用printf要包含的头文件int main()printf(%s is %d years old n, Deco, 24);return 0;14.2.2 标准输入函数scanfscanf用于从标准输入设备(通常是键盘)读取流数据到内存中,和printf的使用方法几乎一致,基本格式为:int scanf(const char*,¶1,¶2);如果控制符和输

10、入流完全匹配,则返回成功转换的匹配数;如果部分匹配(从前往后),则返回已经成功转换的匹配数;如果完全不匹配,则返回0;代码14-2,进行匹配输入示例。代码14-3示例了不完全匹配输入的情况。针对下述代码如果输入“3A”这样的字符则完全匹配,结果正常,但如果输入“A3”,则匹配失败。但输入的A仍然滞留在缓冲区中,结果是num没有赋值成功,A则赋值给了chrscanf(“%d”, &num);Scanf(“%c”, &chr);解决方法:使用清除标准输入缓冲区函数fflush(stdin) 。除了%c之外,%d, %s等都会自动跳过前导空格和换行符等。在%c前加一个空格,则可达到同样效果。%与转换

11、字符间加星号(*)表示读取指定类型的数据,但不存储。如scanf(“%d %*d %d”, &x, &y);输入10/20后x=10, y=20,“/”虽然被读取但不保存。14.2.3 扫描集 对scanf函数而言,扫描集(scanset)是个十分重要的概念。扫描集定义一个字符集合,可由scanf()读入其中允许的字符并赋给对应字符数组。扫描集合由一对方括号中的一串字符定义,左方括号前必须缀以百分号。 特定扫描集:如%ABC使scanf()读入字符A、B和C组成字符串 范围扫描集:如%0-9使scanf()读入当前输入流中的数字,碰到非数字结束。 反向扫描集:如%Q在碰到非Q时字符时会一直接收


文档来源:https://www.renrendoc.com/paper/212691717.html

文档标签:

下载地址