(中职)编程语言基础-C++模块11教学课件_第1页
(中职)编程语言基础-C++模块11教学课件_第2页
(中职)编程语言基础-C++模块11教学课件_第3页
(中职)编程语言基础-C++模块11教学课件_第4页
(中职)编程语言基础-C++模块11教学课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YCF正版可修改PPT(中职)编程语言基础-C+模块11教学课件模块11 C+流与文件任务1 C+流的概述任务2格式化输入和输出任务3文件返回任务1 C+流的概述学习一种程序设计语言往往从编写一个简单的输出程序开始。下一页返回任务1 C+流的概述例11一1是一个简单的C程序,主要功能是在显示屏上输出“Hello World ! ,实现这一功能的是函数printf。然而,C+语言本身并没有定义输入、输出函数,它的输入、输出功能是通过调用外部库函数来实现的。printf()函数属于“stdio. h(标准输入/输出)库,因此,在程序中使用printf)函数时,需要通过includ。语句引用、tdi

2、。库,即#include 在C+中,除了继续使用C语言习惯用的库函数实现输入输出,还引人了“流( stream)”的概念。“流”即数据流,是字符序列在主机与外部介质之间的流动,它负责在数据的产生者和使用者之间建立联系,并管理数据的流动。每一种流都是与设备相关的对象。上一页下一页返回任务1 C+流的概述它具有方向性:与输入设备相联系的流称为输入流;与输出设备相联系的流称为输出流;与输入输出设备(如磁盘)相联系的流称为输入输出流。表11-1是C+中的标准流设备以及对应的C语言中的设备名称。cerr与tout的输出默认设备都是屏幕,二者的区别是cout为标准输出,而cerr为标准错误输出,cerr的

3、输出没有缓冲区,结果会立刻显示在用户终端上。 数据的流动需要管道,而流通的管道就是“”(输入操作符)。“”原本是C+语言中的左移和右移运算符,它们在C+中被重载为输出和输入操作符,并有了新的名称:插人运算符和提取运算符。上一页下一页返回任务1 C+流的概述 在C+中“流”是可以扩充的。例如定义了一个结构MyStruct后,就可以教会插人运算符如何输出一个结构对象,教会提取运算符如何读取一个结构对象。 现在,看看C+风格的“Hello World”是如何编写的。上一页下一页返回任务1 C+流的概述 在这个程序中,用iostream库代替stdio库,用插人运算符“”的各种重载形式,它还包括一些更

4、传统的语句如bet()和二ad。它的派生类ifstream类负责处理文件的输入,istrstream类负责处理字符串,istream_ withassign类创建了标准输入对象cin。相对应地,ostream类是通用输出流类和其他输出流类的基类,定义了输出运算符“”的各种重载形式,其派生类ofstream类负责处理文件,ostrstream负责处理字符串,ostream-withassign创建了标准输出对象cout、标准错误输出cerr和clog( cerr的缓冲形式)。iostream类是由is-tream类和ostream类派生的,负责创建输入输出流。上一页下一页返回任务1 C+流的概述

5、 C+提供了一个流类库,流类库由若干完成I/0操作的基础类以及若干支持特定种类的源和日标的I/o操作类组成。流类库的基础类利用继承关系组织起来,其类层次如图11-1所示,这些类的说明如表11-2所示。所有使用流类库的程序必须用“#include”编译指令将“iostream. h”包含进来。上一页返回任务2格式化输入和输出 在以前的程序中,所有I/O采用的格式都是由C+流类库提供的默认方式。在实际应用中,常常需要准确控制数据(特别是整数、浮点数与字符串)的I/O格式。流类库可用两种方法控制数据的格式:使用流对象的成员函数和使用I/O控制符。11. 2. 1使用流对象的成员函数下一页返回任务2格

6、式化输入和输出上一页下一页返回任务2格式化输入和输出precision()为cout对象的成员函数,在要求输出一定精度的数据之前,先调用这个精度设置成员函数。)上一页下一页返回任务2格式化输入和输出11. 2. 2用控制符manipulators(控制符)是在头文件iomanip. h中定义的对象,与成员函数调用效果一样。控制符的优点是程序可以直接将它们插人流中,不必单独调用。上一页下一页返回任务2格式化输入和输出上一页下一页返回任务2格式化输入和输出常用控制符和流格式控制成员函数如表11-3所示。控制符和流成员函数相对应,它们用法不同,但作用相同。其中setw( n)或width( n)很特

7、别,它们在下一个域输出后,又回到原先的默认值。上一页下一页返回任务2格式化输入和输出运行结果中的下横线表示空格。整数20并没有按宽度8输出。setw()的默认值为宽度0.即setw(O),意思是,按输出对象的表示宽度输出。所以20就紧挨10了。若要每个数值都有域宽度8,则每个值都要设置: coutsetw(8)10 setw(8)20endl 从中得出,用控制符的方法更加直接。上一页下一页返回任务2格式化输入和输出上一页下一页返回任务2格式化输入和输出上一页下一页返回任务2格式化输入和输出Coutsetfill( )setw(n)“ ”中“ ”要显示的长度为n,但它本身的长度只有1,所以其余的

8、内容也就由setfill( )来填充了,效果就使得a前的空格逐行增加。同样,coutsetfill(a)setw(15-2*n,),但它本身的长度只有1,所以其余的内容就有setfill来填充了,由于15-2*n逐行递减,结果就显示出一个用a构筑的倒三角上一页返回任务3文件11.3.1流式文件的I/O函数流式I/O函数把所有输出写人到输出缓冲区中,并不是在执行输出语句时直接向输出设备输出数据。当写满输入缓冲区后,将所有数据写人磁盘。 流式文件I/O函数分为缓冲型文件系统和非缓冲型文件系统两种。 缓冲型文件系统又称为ANSI系统,它通过文件指针对文件进行操作,是标准系统,可以在绝大多数运行PC类

9、操作系统的PC机上使用。 非缓冲型文件系统采用UNIX系统标准,只能在UNIX系统下使用。它不使用文件指针。本任务只介绍缓冲型文件系统中的文件I/O函数。 文件I/ ()函数的大部分包括在stdio. h文件中,包括对文件的各种操作函数,分为以下几类函数。下一页返回任务3文件文件的打开与关闭。 文件的读写。 文件定位。 文件错误检测。 缓冲区设置。 流式文件I/O函数将流与文件联系起来,用流表示文件,所有数据的I/0操作在流上进行。当用户程序开始执行时,自动打开5个流。这些流是标准输入(stdin、标准输出(std-out、标准错误(stderr、标准打印(stdprn、标准辅助(stdaux

10、 ) ,默认情况下,标准输入、标准输出和标准错误都指向用户的控制台。这意味着,一旦程序准备从标准输入接收输入,则从控制台接收。)上一页下一页返回任务3文件文件I/ ()的基本过程为:打开文件;读写文件;错误检测;关闭文件。 下面按类别介绍文件I/O函数。 1.文件的打开与关闭函数 访问一个文件,必须先打开文件。打开文件的函数为fopen,函数原型为: FILE*fopen( cons char*filename,char*mode 其中,filename是文件名,mode是文件的I/0方式,具体含义如表11-4所示,函数返回值是一个FILE类型的指针。上一页下一页返回任务3文件如果函数fope

11、n()执行成功,则FILE指针指向指定的文件,否则,返回一个空指针。 对文件的操作完毕后,要立即关闭文件。关闭文件操作将缓冲区中的数据写人文件中,并释放系统分配给流的缓冲区,断开文件和流的联系。关闭文件的函数有两个,它们的原型分别为: int fclose ( FILE * stream ) ;该函数的功能是关闭指定的流。如果关闭成功,则返回0,否则返回EOF) int fcloseall( void) ;该函数的功能是关闭所有的非标准I/0流。如果关闭成功,则返回已关闭流的数量,否则返回EOF)上一页下一页返回任务3文件2.文件的读写函数文件的读写分为读写字符、读写字符串、读写格式以及直接读

12、写等。(1)读字符函数fgect():从流文件中读一个字符,函数原型为:int fgetc ( FILE*stream;若函数执行成功,返回读取的字符,当遇到文件结束或出错时,返回EOF)(2)写字符函数年ute:将字符输出到流中,函数原型为:int fputc(int ch,FILE*stream;若函数执行失败,则返回EOF)(3)读字符串函数积ets():函数积ets ()的原型为:char*fgets ( char*s,int n,FILE*stream); 函数fgets ()从流中读人的n个字符存到字符串s中。执行成功,则返回字符型指针s,否则返回空指针。)上一页下一页返回任务3文

13、件(4)写字符串函数印uts:函数中印uts()的原型为: char*fputs( char*s,FILE*stream); 函数中印uts)将字符串s输出到文件中。若执行成功,则返回字符串s中的最后一个字符,否则返回EOF) (5)格式化I/0函数:利用C+语言提供的各种输出格式,可以输出整齐的打印图象、报告、表格等。提供各种格式的函数是fprintf()和fscanf()。它们的函数原型为: int fprintf( FILE*stream,格式串,参数表); int fscanf( FILE*stream,格式串,参数表); 用这两个函数读写的文件必须是文本文件,使用时要进行格式转换。上

14、一页下一页返回任务3文件(6)直接读写函数:直接读写函数是fread()和fwrite ( )。函数原型为: int fread ( void*ptr,int size,int nmemh,FILE*stream); int fwrite ( void*ptr, int size,int nmemh,FILE*stream); ptr指向输入/输出对象,S1Ze是每个读写成员的字节数,nmemh是要读写的成员数目。stream是正在读写的文件流。函数执行成功时返回实际读写的成员数目。遇到文件结束符或出错时,返回成员数目,或者返回小于nmemh的值,或者返回0上一页下一页返回任务3文件3.文件定

15、位函数在C+中,对文件操作时有一个位置指针变量,指向当前的读写位置。(1)函数二wind:用于将文件位置指针移动到文件的开始处,函数原型为:int rewind( FILE*stream);函数执行成功时返回0(2)函数fseek:用于改变文件的读写位置,函数原型为:int fseek ( FILE*stream,long offset,int where);上一页下一页返回任务3文件stream是文件流。offset是位移量,用来确定位置指针移动的字节数。whe二是起始点,用来确定移动的起始位置。函数fseek)将文件的位置指针从起始点where移动offset个字节。起始点用3个符号常量或

16、3个整数表示,具体含义如表11-5所示。位移量offset用长整型数表示,即整型数后加字符L。如果位移量为正数,则表示位置指针向前移动。如果位移量为负数,则表示位置指针向后移动。例如:上一页下一页返回任务3文件函数fseek()一般用于二进制文件,因为文本文件需要进行转换,在计算位置时很容易出错。若函数执行成功,则返回0,否则返回一个非0值。 (3)函数ftell():用于得到文件当前读/写的位置,函数原型为: long ftell( FILE*stream); 函数ftell)执行成功时,返回文件位置指针相对文件开始处的位移量(字节数),否则返回值为一1L.上一页下一页返回任务3文件4.检测

17、函数 (1)检测文件结束函数feof( :用于检测文件的位置指针是否已到文件的结束处,函数原型为: int feof ( FILE*stream); 如果文件已到达文件结束处,则返回一个非0值。否则返回0,表示没到文件结束位置。 在stdio. h头文件中,将文件结束符EOF定义为一1。在文本文件中,每个字符的ASCII码不可能是一1,可以用一1表示文件结束。但是在二进制文件中,某个字节的值有可能为一1。上一页下一页返回任务3文件(2)检测I/0出错函数ferror(:用于检测文件的读写错误,函数原型为:int ferror ( FILE*stream); 若文件中有错误,则返回一个非。值。如

18、果没有错误,则返回0。 (3)清除文件结束标志和出错标志函数clearerr:用于清除文件结束标志和I/0错误数值代码,函数原型为: void clearerr( FILE*stream); 若函数执行成功,则返回0。上一页下一页返回任务3文件11. 3. 2文件的打开和关闭在C+中使用输入输出流操作文件,要打开一个文件,所要做的就是建立一个文件对象。一般构造函数负责打开文件,析构函数负责关闭文件。 C+中的文件流分为输入、输出和输入/输出3类,分别对应ifstream , ofstream和fstream 3个文件流类。要创建文件流,必须包含头文件fstream,然后用对应的文件流类声明实例

19、对象。 ifsueam ifile; /律输入流对象ifile ofsueam ofile; /iJ3输出流对象Mile fsueam iofile; /iJ律输入/输出流对象iofile上一页下一页返回任务3文件在C+中,流是一种逻辑机制,文件是实际存在于磁盘上的数据集合。简单地说,打开文件就是把流与文件相连接,关闭文件就是切断这一连接。打开文件时,还要指定文件是与哪种文件流相连接,是输入流、输出流还是输入/输出流。上一页下一页返回任务3文件1.文件的打开 一般情况下,可以通过下列两种方式打开文件。 (1)创建文件流对象。创建文件流对象的格式如下: (,); 其中,文件流可以是ofstrea

20、m , ifstream,一也可以是fstream。文件对象是创建的文件流对象,文件名是与文件流建立关联的文件名称(包括文件路径,路径应使用双斜杠“”),它是一个字符串,存取模式是文件操作模式的标志。一般常用的操作模式有: ios:in /只读文件模式 ins: : out /只写文件模式 ins: : app /泊加文件模式上一页下一页返回任务3文件这些标志可以使用“”符号相连接,以同时设置几种模式。 为了打开一个可供输出的文件,定义一个ofstream对象,并设置文件名。 ofstream ofile ( c: temp sample. txt) ios: : out标志被省略了,这是因为

21、使用ofstream创建对象时,ios: : out是默认设置。声明ofile的同时,如果指定的文件不存在,便会有一个文件被产生出来并作为输出之用,如果指定的文件已经存在,这个文件会被打开作为输出之用,并且使这个文件变为空文件,而文件中原有的数据被丢弃。 如果文件已经存在,又不希望丢弃其原有内容,而是希望添加新数据到文件中,那么必须使用追加模式打开文件。上一页下一页返回任务3文件ofstream ofile ( c: temp sample . txt , ios:app); 文件有可能打开失败,在进行写人操作之前,必须确定文件已经成功打开,最简单的办法就是检验文件类对象的真伪: if!ofi

22、le 如果文件未能成功打开,ofstream的对象ofile会被计算为false,可以将错误信息写人cerr,告知用户。 if(!ofile ) cerr 文件打开错误!; else文件打开成功,进行写人数据操作。 如果文件顺利打开,就可以像操作cout和cerr:对象一样操作ofile对象。上一页下一页返回任务3文件同写人文件相似,如果要打开一个可供读取的文件,只要定义一个ifstream对象,并将文件名传人就可以了。 ifstream ifile ( c: temp sample. txt if!ifile ) cerr 文件打开失败!; else文件打开成功,读取位置被设在文件起始处,进

23、行读取数据操作。 如果要同时读写同一个文件,需要定义一个fstream对象,并把文件操作模式标志设为ios:in I ios:out或ios:in I ios:app上一页下一页返回任务3文件上一页下一页返回任务3文件以追加模式打开文件时,读取或写人的位置会置于文件的末端,如果这时就尝试读取文件内容,那么立刻会遇到读到文件结尾的情况。seekg ( 0函数可以将文件位置重新定位至文件的起始处。 (2)使用open()函数。可以使用open()函数来打开一个文件,其调用形式如下: ; open(,); fstream file_ object;file_ object. open( file_

24、name,access_ mode);各个参数的含义与创建文件流方式时相同。存取模式标志位完整的定义如表11-6所示:上一页下一页返回任务3文件2.文件的关闭对应open()函数,文件流一也有close)函数。它们必须配对使用。close)是一个没有参数并且不需要指定返回值的函数。可以用下面的格式打开使用infile. txt文件:ifstream ifile;ifile. open(”infile. txt,ios:in;使用ifile. txt文件:ifile. close();最后要关闭文件。上一页下一页返回任务3文件11.3.3文件的读写一个文件被打开以后,就与对应的流连接起来。这时对

25、文件的读操作,就是从流中提取元素,对文件的写操作就是向流中插人元素。文件的打开模式分为文本模式和二进制模式。以文本模式打开文件,操作其对应的文件流的方式与操作一般输入输出流的方式相类似。上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件这是一个档案记录程序,它建立档案文件file. txt,并将姓名、年龄、性别依次填人。文件内容如下: 姓名年龄性别 赵易 21 男 钱耳 25 女 孙伞 26 男 李四 22 女上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件 上面这段程序在“C; ;”日录下创建文件ahc. t

26、xt,文件内容为: Hello file! Hi Bov and Girl!。 最后程序将文件内容输出。 以二进制方式打开的文件,对它的读写操作与文本文件有所不同。程序必须按照数据在内存或磁盘中的存放格式一个字节一个字节地读取或写人。这需要使用read)函数和write)函数。上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件 由于write函数只能写字符串,所以,对于其他类型的数据,必须先以“( char*)+数据地址”的形式将它们转变为字符串类型,通过sizeof)函数可以得到数据的长度。同样,read()函数一也通过相同的方式读取二进制文件。上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件上一页下一页返回任务3文件在对文件流进行操纵时,可能会遇到各种各样的情况。这时,需要一种方法来测试文件流的状态,在表11-7中定义了5种文件流的状态。对应这5种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论