C语言程序设计(第二版)-电子教案-任正云 第10章文件

上传人:E**** 文档编号:89422740 上传时间:2019-05-25 格式:PPT 页数:28 大小:564KB
返回 下载 相关 举报
C语言程序设计(第二版)-电子教案-任正云 第10章文件_第1页
第1页 / 共28页
C语言程序设计(第二版)-电子教案-任正云 第10章文件_第2页
第2页 / 共28页
C语言程序设计(第二版)-电子教案-任正云 第10章文件_第3页
第3页 / 共28页
C语言程序设计(第二版)-电子教案-任正云 第10章文件_第4页
第4页 / 共28页
C语言程序设计(第二版)-电子教案-任正云 第10章文件_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《C语言程序设计(第二版)-电子教案-任正云 第10章文件》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版)-电子教案-任正云 第10章文件(28页珍藏版)》请在金锄头文库上搜索。

1、第10章 文件,文件一般指存储在计算机外部介质上的一组数据的集合。,10.1 文件的概念,10.2 格式化数据文件操作,10.3 字符数据文件操作,10.4 fread()与fwrite()函数,10.5 文件位置定位与错误处理函数,10.6 应用实例大奖赛评分系统,第十章 文件,10.1 文件的概念 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位,使用数据文件的目的 1、数据文件的改动不引起程序的改动程序与数据分离 2、不同程序可以访问同一数据文件中的数据数据共享 3、能长期保存程序运行的中间数据或结果数据,文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和

2、不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放,10.1.2 C语言对文件的处理方法,C语言对文件的处理一般有两种方法: 缓冲文件系统 在缓冲文件系统中,系统对文件进行读写之前首先在内存区开辟一个称作缓冲区的专用内存区域。 从内存向磁盘写文件时必须先写入缓冲区,装满缓冲区后才一起写到磁盘上去; 从磁盘读文件时必须先把一批数据读到缓冲区(充满缓冲区),然后再从

3、缓冲区将数据逐个送到用户数据区。 非缓冲文件系统 在非缓冲文件系统中,文件的处理不自动开辟确定大小的缓冲区,而是由程序设定缓冲区。 一般用缓冲文件系统进行的输入/输出称为高级磁盘输入/输出。用非缓冲文件系统进行的输入/输出称为低级(低层)输入/输出。,10.1.3 文件的访问方式,(1)文件操作过程。文件操作需要包括以下几个过程: 1)文件指针定义。 2)文件打开。 3)文件处理,执行以下两种操作中的一种:读文件和写文件。 4)文件关闭。 (2)文件指针定义。 C语言规定对文件的所有操作都必须用文件指针建立与打开文件的联系,之后才能进行读写操作。 文件指针定义格式为: FILE z指针变量 例

4、如,FILEfp;,10.2 格式化数据文件操作 C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件文件读/写关闭文件 系统自动打开和关闭三个标准文件: 标准输入-键盘 stdin 标准输出-显示器 stdout 标准出错输出-显示器 stderr 打开文件fopen 函数原型: FILE *fopen(char *name,char *mode),功能:按指定方式打开文件 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL,要打开的文件名,使用文件方式,例 文件打开与测试 FILE *fp; fp=fopen(“aa.c“, “w“); if(fp=NULL) p

5、rintf(“File open error!n“); exit(0); ,例 FILE *fp; fp= fopen (“c:zhoutest.dat”,”r”);,例 FILE *fp; char *filename=“c:zhoutest.dat“ fp= fopen(filename, “r“);,10.2.1 打开文件函数fopen(),函数格式: FILEfopen(charfilename,charopstyle); 函数功能:返回一个指向指定文件(描述块)的指针。 函数说明: (1)filename是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。如

6、果直接使用文件名,必须加双引号。文件名前可以带路径,但一定要注意路径中的反斜杠“”要用两个代替,因为“”在字符串中作转义符号。 (2)opstyle参数指明文件操作类型,文件使用方式由rwatb+这6个字符拼成,各字符的含义是:,(3)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为0)。 (4)“rb+”与“ab+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。 (5)在C语言中,把文本保存到ASCII文件中时,系统自动将回车换行符转换成一个换行符;在从ASCII文件中读写数据时,将换行符自

7、动转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不用再进行转化。 (6)用“r+”,“w+”或“a+”打开的文件可以用来输入和输出数据。使用“r+”方式时,该文件应该已经存在,以便能向计算机中输入数据。用“w+”方式则新建立一个文件夹,先向此文件中写数据,然后可以从中读写数据。用“a+”方式打开的文件,原来的文件不被删除,读写位置指针移动到文件尾,可以添加数据也可以读出数据。 (7)在程序开始运行时,系统自动打开3个标准文件,并分别定义了文件指针: 1)标准的输入文件stdin:指从终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数

8、据,就是从终端键盘上输入数据。 2)标准的输出文件stdout:指向终端输出(一般为显示器)。 3)标准的错误文件stderr:指向终端标准错误输出(一般为显示器)。,注意,在实际应用中,常用下面的方法打开一个文件: char filename=“d:tcdatacj.dat“; if(fp=fopen (filename,opstyle)=NULL) printf(“ n不能打开文件.n “); exit(1); ,10.2.2 关闭文件函数fclose(),函数格式: int fclose(FILE *fp); 函数功能: 关闭fp所指向的文件,释放其缓冲区。 如果正常关闭文件,则函数返回

9、值为0;否则,返回值为非0。 例如: 关闭文件指针fp所指向的文件函数如下:fclose(fp); 函数说明: (1)每次只能关闭一个文件,若需要关闭多个文件,要书写多个命令函数。 (2)一旦关闭了与fp有联系的文件后,fp可以在此用于建立与其他文件的联系。,10.2.3 从文件中格式化输入数据fscanf(),函数格式: int fscanf(FILE *fp,char format,var_addr_list); 其中: fp:文件指针。 format:格式输入控制字符串,与scanf()中的格式控制一致。 van_addr_list:输入变量地址列表。 函数功能:从指定文件中按定义格式化

10、读取数据,赋值给指定变量。 函数说明: (1)函数fscanf()的功能与以前介绍的标准输入函数scanf()基本相同,不同点是scanf()从标准输入设备即键盘上输入数据,而此函数是从某文件格式化输入数据,当然也可以是键盘,因为对操作系统来说,键盘也是一个文件。 (2)函数中格式控制必须与文件中数据存储格式完全一致,即对应数据项的个数与类型完全一致。,10.2.4 向文件中格式化输出函数fprintf(),函数格式: int fprintf(FILE *fp,char format,varlist); 其中: fp:文件指针。 format:格式输出控制字符串,与printf ()中的格式定

11、义一致。 varlist:输出变量地址列表。 函数功能:向指定文件中按定义格式写数据。 函数说明: (1)此函数功能与前面介绍的标准输出函数printf ()基本相同,不同点是printf输出到标准输出设备即显示器上,而此函数是向某文件中格式化输出数据。当然使用此函数也可以向显示器上输出信息。 (2)printf()函数与fscanf()函数是一对匹配的函数,fscanf()函数读取数据的格式必须与fprintf()函数定义的输出格式完全一致。,10.2.5 文件建立,【例10.1】 键盘输入5位同学的3门课成绩,保存在数据文件cj.dat中。,算法分析:这是一个文件创建的例子,在程序执行之前

12、,文件cj.dat不存在。文件采用格式化输出方式,以ASCII码形式存储。,#include“stdio.h“ main() FILE*fp; /*定义文件指针*/ float sc1,sc2,sc3; int i; if(fp=fopen(“cj.dat“,“w“)=NULL) printf(“nCan not open file cj.dat.n“); exit(1); for(i=0;i5;i+) printf(“please input No.%d there scores:“,i+1); scanf(“%d,%d,%d“, ,程序说明: (1)文件按写方式打开。文件打开采用了容错技术

13、,即当程序打开失败时,fopen()函数返回值为NULL,给出错误提示,并终止程序。 (2)通过格式输入从键盘获取学生成绩,每次输入一个人的3门课成绩,称为一条记录。 (3)采用文件格式化输出函数写文件,一条记录占一行,由3个逗号分隔的数据组成。 (4)文件操作遵循定义、打开、数据准备(非文件操作)、写、关闭等过程。,10.2.6 文件访问,【例10.2】显示【例10.1】所产生的数据文件cj.dat的内容,并计算各门课程的平均分。,算法分析:这是一个典型的文件读操作,采用格式化输入函数读取文件,按行(记录)读取,显示记录内容,同时累加各门课程成绩。,#include main() FILE

14、*fp; /*定义文件指针*/ float sc1,sc2,sc3,sum1=0,sum2=0,sum3=0; int i; if(fp=fopen(“cj.dat“,“r“ )=NULL) printf(“nCan not open file cj.dat.n“); exit(1); for(i=0;i5;i+) fscanf(fp,“%d,%d,%d“, ,程序说明: (1)文件按读方式打开。文件打开采用了容错技术,即文件打开失败,fopen()函数返回值为NULL,给出错误提示,并终止程序. (2)通过格式输入从文件中读取学生成绩,每次读入一个人的3门课成绩一条记录,数据读格式控制与文件

15、创建时数据写格式完全一致。 (3)读取记录时,将不同课程成绩分别累加到不同累加和变量中,留作计算平均分时使用。 (4)文件操作遵循定义、打开、读、数据处理(非文件操作)、关闭等过程。,10.2.7 文件修改,若存在一个文件,需要对文件中的数据进行修改、更新或追加等,此时不仅涉及文件的读操作,还涉及文件的写操作。 追加是使用文件操作类型“a”。,【例10.3】 追加一条记录到【例10.1】建立的数据文件cj.dat中。,#include“ stdio.h “ main() FILE *fp; float sc1,sc2,sc3; if(fp=fopen(“ cj.dat “,“ a “)=NUL

16、L) printf(“ nCan not open file cj.dat.n “); exit(1); printf(“ Please input third students three scores: “); scanf(“ %d,%d,%d “ , ,【例10.4】 在【例10.1】中建立的数据文件中第三个同学的成绩后面插入一条记录。,算法分析:文件的修改或插入新记录一般引入第二个文件,直接覆盖写操作,要么全部覆盖原有的数据(打开方式w+),要么覆盖部分内容,导致数据不完整(打开方式为r+)。引入第二个文件,从第一个文件读数据,向第二个文件中写入记录。,# include “stdio.h “ main() FILE *rfp,*wfp; /*定义文件指针*/ float sc1,sc2,sc3; int i; rfp=fo

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

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

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