C语言程序设计 教学课件 ppt 作者 李学军 第12章

上传人:E**** 文档编号:89390003 上传时间:2019-05-24 格式:PPT 页数:29 大小:101.50KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 李学军 第12章_第1页
第1页 / 共29页
C语言程序设计 教学课件 ppt 作者 李学军 第12章_第2页
第2页 / 共29页
C语言程序设计 教学课件 ppt 作者 李学军 第12章_第3页
第3页 / 共29页
C语言程序设计 教学课件 ppt 作者 李学军 第12章_第4页
第4页 / 共29页
C语言程序设计 教学课件 ppt 作者 李学军 第12章_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 李学军 第12章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 李学军 第12章(29页珍藏版)》请在金锄头文库上搜索。

1、2019/5/24,C语言程序设计,1,第12章 文件,主要内容 C语言文件概述 文件的打开与关闭 文件的读写 位置指针与文件定位 出错检测 应用举例 核心知识点 文件的打开与关闭 文件的读写 位置指针与文件定位 文件状态检测,2019/5/24,C语言程序设计,2,第12章 文件,重点难点 文件的打开、关闭及文件的读写操作 文件状态检测 学习目标 掌握文件的打开与关闭函数fopen( )和fclose( ) 了解文件定位函数的使用方法 掌握文件读写类函数的格式、功能及使用方法 掌握文件出错检测函数ferror( )、clearerr( )的功能,2019/5/24,C语言程序设计,3,第12

2、章 文件,12.1 C语言文件概述 12.2 文件的打开与关闭 12.3 文件的读写 12.4 位置指针与文件定位 12.5 出错检测 12.6 应用举例,2019/5/24,C语言程序设计,4,12.1 C语言文件概述,12.1.1 文件的概念与分类 1、文件的概念 文件是程序设计中的一个重要概念。所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存储在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,按名存取,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标

3、识),才能向它输出数据。例如,C语言源程序就是以C为后缀,存储在存储介质上的文件。运行Turbo C时,执行的tc.exe也是一个文件。为标识一个文件,每个文件必须有一个文件名,一般形式为:文件名.扩展名,其中扩展名是可选的,并按类别命名,例如,C语言源程序的扩展名C,而可执行程序的扩展名是EXE,等等。 文件名的命名规则,遵照操作系统的约定。例如,在MS-DOS系统下,文件名的有效字符为字母、数字和部分专用符号,文件名最大长度为8,扩展名最大长度为3。如果超长,则以最大长度截取。,2019/5/24,C语言程序设计,5,2、文件分类 文件有很多种,大家熟知的有文本文件、图形文件、声音文件、可

4、执行文件等,它们有很多的分类方法。C语言把文件看作是一个字符(字节)的系列, 即由一个一个字符(字节)的数据顺序组成,根据数据的组织形式,文件可以分为以下两类: (1)ASCII文件 ASCII文件又称为文本(text)文件,是指由字符组成的文件。字符可以是字母、数字、运算符等,每个字符通过ASCII码进行编码后存储在文件中。 (2)二进制文件 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。前面提到的tc.exe就是一个二进制文件。 例如,整数123,由1、2和3这3个字符组成,它们的ASCII码分别为分别为49、50、51,所以在ASCII文件中存放的就是49、50、

5、51这3个数,需要3个字节。在二进制文件中存放的就是123,因此只要占用一个字节就行了,2019/5/24,C语言程序设计,6,12.1.2 缓冲文件系统与非缓冲文件系统,C语言没有提供对文件进行操作的语句,所有的文件操作都是利用C语言编译系统所提供的库函数来实现。多数C语言编译系统都提供两种文件处理方式,即“缓冲文件系统”和“非缓冲文件系统”。也就是说C语言提供了两套文件操作函数来存取文件。 所谓缓冲文件系统是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数

6、据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。,2019/5/24,C语言程序设计,7,缓冲区的大小由各个具体的C版本确定,一般为512字节。这样做的好处是能减少对文件存取的操作次数。所以,它与具体机器无关是,通用性好,功能强,使用方便。 所谓“非缓冲文件系统”是指系统不自动提供确定大小的缓冲区,而是由用户根据所处理的数据大小在程序中设置。因此,这种文件系统与机器有关,使用较为困难,但它节省内存,执行效率较高。 在UNIX系统下,用缓冲文件系统来处理ASCII文件,用非缓冲文件系统处理二进制文件。用缓冲文件系统进行的输入输出又称为高级标准文件系统或高

7、层文件系统,用非缓冲文件系统进行的输入输出又称为低层文件系统。ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲文件系统,即既用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件。,2019/5/24,C语言程序设计,8,12.1.3 文件的操作流程,对文件(一般指缓冲文件)进行操作时,必须遵循以下4个步骤: (1) 定义一个文件类型的指针变量:file *fp; (2)通过文件名打开文件,并为文件指针赋值 fp=fopen(“文件名”, “操作方式”); (3)通过文件指针对文件进行读(或写)操作 例如,调用库函数fputs( )或fgets(

8、 )完成读写文件的工作 (4)通过文件指针关闭文件: fclose(fp);,2019/5/24,C语言程序设计,9,12.2 文件的打开与关闭,对文件进行读写操作之前,必须先要打开该文件;使用结束后,应立即关闭,以免数据丢失。文件的打开和关闭都是通过函数来实现的。 打开文件是使一个文件指针变量指向被打开文件的结构变量,以便通过该指针变量访问打开的文件。 关闭文件则是把(输出)缓冲区的数据输出到磁盘文件中,同时释放文件指针变量,使指针变量不再指向该文件,此后,不能再通过该文件指针变量来访问该文件,除非再次打开了该文件。,2019/5/24,C语言程序设计,10,12.2.1 文件的的打开函数f

9、open(),C语言中,使用fopen( )函数来打开文件,fopen( )函数的调用方式如下: Fopen(“文件名”,“文件使用方式”) 函数返回一个指向FILE类型的指针。例如: FILE *fp; fp=fopen(“a1”, “r”) 它表示要打开名为a1的文件,使用文件方式为“读入”(r代表read,即读入),fopen函数带回指向a1文件的指针并赋给fp,这样fp就和a1相联系了,或者说,fp指向a1文件。可能看出,在打开一个文件时,通知给编译系统以下3个信息:需要打开的文件名,也就是准备访问的文件的名字。使用文件的方式(“读”还是“写”等)。让哪一个指针变量指向被打开的文件。,

10、2019/5/24,C语言程序设计,11,12.2.2 文件的关闭函数fcolse(),在使用完一个文件后应该关闭,以防止被误用。“关闭”就是使原来指向该文件的文件指针与文件脱离,以便再使用该文件指针时,不会对该文件进行读写操作,除非再次打开了该文件。 用fclose函数关闭文件。fclose函数调用的一般形式为 fclose(文件指针); 例如: fclose(fp); 前面我们曾把打开文件(用fclose函数)时所带回的指针赋给了fp,今通过fp把该文件关闭。即fp不再指向该文件。 应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将会丢失数据。因为,如前所述,在向文件写数据时,是先

11、将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。 fclose函数也带回一个值,当顺利地执行了关闭操作,则返回值为0;否则返回EOF(-1)。可以用ferror函数来测试。,2019/5/24,C语言程序设计,12,12.3 文件的读写,文件打开之后,就可以对它进行读写操作了。文件读写包括文本文件的字符或字符串读写、二进制文件的数据块读写和文本文件的格式化读写等方式,这些读写都是通过函数来实现的。,2019/5/24,C语言程序设计,13,12.3.1 读写一个字符函数,1.fputc函数(p

12、utc函数) (1)fputc函数的一般调用形式: fputc(ch,fp); 其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。 (2)功能:fputc(ch,fp)函数的作用是将字符(ch的值)输出到fp所指向的文件中去。 (3)说明:fputc函数可以返回一个值:如果输出成功就返回输出的字符;如果输出失败,则返回一个EOF(-1)。EOF是在stdio.h文件中定义的符号常量,值为-1。EOF也是文件结束的标志。,2019/5/24,C语言程序设计,14,12.3.2 读写一个字符串函数,1.fputs函数(写字符串函数) (1)fputs函数的一般

13、调用形式: fputs(str,fp) 其中fp是文件指针,str是要待输出的字符串,可以是字符串常量、指向字符串的指针或存放字符串的字符数组名等。 (2)功能:将字符串string写入文件指针fp所指的文件中。fputs( )函数带返回值。若输出成功,返回值为0,否则返回值为非零。 (3)说明:串结束符将不被写入文件。因此,为了读取数据的方便,设法使字符串分开,往往用fputs(“n”,fp)语句在每个字符串后加一个换行符n一起存入文件中。,2019/5/24,C语言程序设计,15,2. fgets函数(读字符串函数) (1)fgets函数的一般调用形式: fgets(str,n,fp);

14、这里,fp是文件指针;str是存放字符串的起始地址;n是一个int类型变量。 (2)功能:从文件指针fp所指的文件中,读字符到字符串str中,当读了n-1个字符或遇到换行符时,函数停止读过程,并在字符串str的最后一个字符后面加上一个串结束符0。需要注意的是,如果遇到换行符,fgets( )将会保留换行字符。 (3)说明:fgets( )函数的返回值为str的首地址。若遇到尾或出错,则返回空指针NULL。,2019/5/24,C语言程序设计,16,12.3.3 读写一个数据块函数 用fgetc、fputc和fgets、fputs可以用来读写文件中的字符或字符串。但是常常要求一次读入一组数据(例

15、如,一个实数或一个结构体变量的值),ANSI C标准提出设置两个函数(fread和fwrite),用来读写一个数据块。这们的一般调用形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中: buffer:是数据块的指针。对于fread来说,它是读入数据存放的起始地址。对于fwrite来说,是待输出数据的起始地址。 size:表示每个数据块的字节数。 count:用来指定每读、写一次,输入或输出数据块的个数(每个数据块具有size字节)。 fp:文件指针。 如果文件以二进制形式打开,用fread和fwrite函数就可以

16、读写任何类型的信息,如: fread(f,4,2,fp); 其中f是一个数组名。一个实型变量占4个字节。这个函数从fp所指向的文件读入2个4字节的数据,存储到数组f中。,2019/5/24,C语言程序设计,17,如果有一个如下的结构体类型: struct student_type char name10; int num; int age; char addr30; stud40; 结构体数组stud有40个元素,每一个元素用来存放一个学生的数据(包括姓名、学号、年龄、地址)。假设学生的数据已放在磁盘文件中,可以用下面的for语句和fread函数读入40个学生的数据。 for(i=0;i40;i+) fread( 如果fread 或fwrite调用成功,则函数返回值为count的值,即输入或输出数据项的完整个数。,2019/5/24,C语言程序设计,18,12.3.4 对文件进行格式化读写函数,fprintf函数、fscanf函数与printf函数、scanf函数用法基本相同,都是格式化读写函数。区别是:fprintf和

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号