C语言程序设计基础10

上传人:飞*** 文档编号:54652701 上传时间:2018-09-16 格式:PPT 页数:29 大小:256.50KB
返回 下载 相关 举报
C语言程序设计基础10_第1页
第1页 / 共29页
C语言程序设计基础10_第2页
第2页 / 共29页
C语言程序设计基础10_第3页
第3页 / 共29页
C语言程序设计基础10_第4页
第4页 / 共29页
C语言程序设计基础10_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C语言程序设计基础10》由会员分享,可在线阅读,更多相关《C语言程序设计基础10(29页珍藏版)》请在金锄头文库上搜索。

1、共 29 页 第 1 页,第十一章,文 件,C语言程序设计,共 29 页 第 2 页,本 章 要 点,掌握文件类型指针 (FILE类型指针)掌握文件的打开与关闭 (fopen, fclose)掌握文件的读写,共 29 页 第 3 页,11.1 C文件概述,1.定义:文件是指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。每一个与主机相连的输入或输出设备都看作是一个文件。 2.组织形式: 按照文件的存储的编码形式分为两类 ASCII码(文本)文件:文件的每一个字节放一个ASCII代码,代表一个字符。 二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上。 3.

2、 逻辑结构: 从文件的逻辑结构把文件看做数据流 字符(字节)序列:由一个个字符(字节)的数据顺序组成,对文件的存取是以字符(字节)为单位,称为字符流。 二进制流,共 29 页 第 4 页,4. 输入输出方式 缓冲文件系统:由于系统对从磁盘文件数据的存取速度与内存数据存取访问的速度不同,文件数据量较大,数据的读写不可能瞬间完成。为了提高数据存取速度,C程序对文件的处理采用缓冲文件系统方式进行。要求程序与文件之间有一个内存缓冲区,程序与文件的数据交换通过缓冲区进行。缓冲区的大小由C系统决定。系统自动为每一个文件分配一个内存缓冲区,当程序要向磁盘文件写入数据 ,必须先送到缓冲区,由操作系统把缓冲区的

3、数据存入磁盘。从文件向内存读入数据,先由操作系统把数据读入缓冲区,然后程序将数据从缓冲区读入内存。,共 29 页 第 5 页,非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。,不同的操作系统对文件的处理采用不同的方式,UNIX用缓冲文件系统处理文本文件,用非缓冲系统处理二进制文件。标准C只采用缓冲文件系统。,共 29 页 第 6 页,C程序对文件的所有操作通过对文件缓冲区的操作来完成。对文件的读写操作通过库函数实现。 程序要处理文件时,只需要跟内存缓冲区打交道,而不必考虑外部磁盘的特性。,操作系统自动完成,程序控制,共 29 页 第 7 页,11.2 文件类型指针

4、,结构体类型 FILE每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。 定义:缓冲文件系统中,获取内存中存放文件有关信息的结构体的指针定义为文件类型指针。通过文件指针变量能找到指定的文件,以实现对文件的访问。,共 29 页 第 8 页,对文件操作的相关信息的结构体类型由系统定义为“FILE”,包含在 stdio.h文件中:如 typedef struct int _fd;; /* 文件号 */int _cleft; /* 缓冲区中剩下的字符 */ int _mode; /* 文件操作模式 */char *_ne

5、xttc; /* 下一个字符位置 */char *_buff; /* 文件缓冲区位置 */ FILE;,共 29 页 第 9 页,例:定义一个文件指针变量 FILE *fp; fp是一个指向FILE结构体类型的指针变量。可以使 fp指向某一个具体文件的结构体变量,通过读取该结构体变量中的有关信息来实现对文件的访问和操作。也就是通过fp 指定要被访问的文件。 提示: 文件操作具有顺序性,文件指针不能进行fp+或 fp操作,前一个数据取出后,下一次将顺序取后 一个数据。,共 29 页 第 10 页,文件的一般操作过程打开文件 建立用户程序与文件的联系操作文件 对文件进行读、写、追加等操作关闭文件

6、切断文件与程序的联系,共 29 页 第 11 页,11.3 文件的打开与关闭,11.3.1 文件的打开(函数 fopen) 功能:在对文件读写之前打开文件。 调用方式:FILE *fp;fp=fopen(文件名,使用文件方式); 返回值:指定文件的指针,若失败返回 NULL 三要素:文件指针,文件名,使用方式 例:fp=fopen(“m1”,”r”);fp=fopen(“e:mydata.dat”,”r”);,表示打开名为m1的文件, 使用方式为“读入”.,提示:文件名和打开方式都是字符串,一般要指出文件存放的路径,不指出路径则默认与当前程序的路径相同。,共 29 页 第 12 页,文件使用方

7、式,共 29 页 第 13 页,文件使用方式,共 29 页 第 14 页,进行文件读写的一般规则 if 读文件指定的文件必须存在,否则出错; if 写文件(指定的文件可以存在,也可以不存在)(1)以“w”方式写:if该文件已经存在原文件将被删去然后重新建立;else按指定的名字新建一个文件;(2)以“a”方式写:if该文件已经存在写入的数据附加在原数据后边;else按指定的名字新建一个文件(与“w”相同);(3)文件同时读和写:使用“r+”、“w+”、“ a+”打开文件。,共 29 页 第 15 页,11.3.2 文件的关闭(函数 fclose),功能:使用文件之后关闭文件。使文件指针变量不再

8、指向该文件。 调用方式:fclose(文件指针); 返回值:关闭成功返回 0,若失败返回 非零值。 例: fclose (fp);在程序结束之前关闭所有使用的文件,如果不关闭文件可能会丢失数据。用fclose关闭文件,将缓冲区的数据输出到磁盘后再释放文件指针变量,可避免数据丢失。,共 29 页 第 16 页,11.4 文件的读写,11.4.1 格式化读写函数fscanf 功能:将指定磁盘文件格式化赋给指定对象。fprintf 功能:将指定对象格式化输出到指定磁盘文件上。 格式: fprintf (文件指针,格式字符串,输出表列) fscanf (文件指针,格式字符串,输入表列) 例:fscan

9、f(fp,”%d%f”,将a和b的值按指定格式写入到fp所指向的文件中。,共 29 页 第 17 页,11.4.2 fputc函数和fgetc函数 fputc 功能: 把一个字符写到fp所指向的磁盘文件中。格式: fputc(ch , fp);,文件类型指针变量,要输出的字符,fgetc功能:从指定磁盘文件读出一个字符,该文件必须是以读或读写的方式打开的。格式:ch=fgetc(fp);,文件类型指针变量,字符变量,若读到文件尾结束符时,函数返回一个文件结束标志EOF(值为-1)。 可用feof(fp)处理文件是否结束,为1结束,否则为0。,若写成功,函数返回该字符,否则返回一个文件结束标志E

10、OF(值为-1)。,共 29 页 第 18 页,例:将一个磁盘文件中的信息复制到另一个磁盘文件中。,#include “stdio.h” main( ) FILE *in, *out; char ch,infile10,outfile10; printf(“%Enter the infile name:n”); scanf(“%s”, infile); printf(“Enter the outfile name: n); scanf(“%s”, outfile);,共 29 页 第 19 页,if(in=fopen(infile, “r”)=NULL) printf(“cannot open

11、 infilen”);exit(0); if(out=fopen(outfile,”w”)=NULL) printf(“cannot open infilen”);exit(0); while(!feof(in) fputc(fgetc(in), out); fclose(in); fclose(out); ,值为1数据读取结束,在while循环中,只要!feof(in)为真,说明in还没有指到文件尾,共 29 页 第 20 页,11.4.3 fread函数和fwrite函数 fread 功能:从指定磁盘文件读入一组数据。格式: fread(buffer, size, count, fp);,

12、要读写的字节数,指针,即读入数据的存放地址,文件类型指针变量,要进行读写多少个size字节的数据项,例:fread(a,2,3,fp);a数组名,从fp所指向的文件中读出3次数据,每次2个字节,存入a数组中。,共 29 页 第 21 页,fwrite功能:把一组数据写到指定磁盘文件上。 格式: fwrite(buffer,size,count, fp);fread()、fwrite()用于读写数据块(指定字节数量,如一个数组元素、一个结构变量的值等。多用于读写二进制文件。,共 29 页 第 22 页,例如:假设学生的数据已存放在磁盘文件中,可用以下for语句和fread函数读入40个学生的数据

13、。 for(i=0; i40; i+)fread(,共 29 页 第 23 页,11.4.4 fgets函数和fputs函数 fgets 功能: 从文件读入一个指定的字符串到内存中。例: fgets(str,n,fp);从fp指向的文件读出一个具有n-1个字符的字符串,存入其始地址为str的内存中. fputs 功能:将指定的字符串输出到fp所指向的文件中.fputs(str,fp);,共 29 页 第 24 页,例:已有文本文件test.txt,内容为Hello,everyone!,以下程序中文件test.txt已正确为“读“而打开,由文件指针fr指向该文件,则程序输出结果为_.#inclu

14、de main() FILE *fr;char str40; fgets(str,5,fr);printf(“%sn“,str);fclose(fr);,Hell,从fr指向的文件读出一个具有5-1个字符的字符串,存入起始地址为str的内存中.,共 29 页 第 25 页,例: 将两个变量的数值写入test.txt 。 # include “stdio.h” main( ) FILE *fp; int i=3; float t=4.5; if (fp=fopen(“test.txt”, “w”) = NULL) printf (“file open failed”);exit(0); fpri

15、ntf(fp,”%d, %6.2f”,i, t ); fclose (fp); ,运行结果: test.txt 的内容是 3,4.50,定义文件指针变量,写入i, t,关闭文件,共 29 页 第 26 页,文件编程综合示例: 现有某学院2009级8班的三十名学生的成绩数据 (包括学号,姓名,三门课成绩,平均成绩),存放在data08.txt文件中。编写程序从文件读入以上数据,计算出每名学生的平均成绩,再将成绩数据存放在data08_a.txt文件中。,共 29 页 第 27 页,#include “stdio.h“ struct student long num;char name8;int

16、score3;float avr; stu30; main() int i,j,sum; FILE *fp1; /*读文件*/ if(fp1=fopen(“data08.txt“, “r“)=NULL)printf(“Cannot open file!“); return 0; for(i=0;i30;i+) fscanf(fp1,“%ld%s%d%d%d“,共 29 页 第 28 页,/*计算*/ for(i=0;i30;i+) sum=0;for(j=0;j3;j+)sum+=stui.scorej;stui.avr=sum/3.0; /*写文件*/if(fp1=fopen(“data08_a.txt“, “w“)=NULL)printf(“Cannot open file!“);return 0;for(i=0;i30;i+)fprintf(fp1, “%ld %s %d %d %d %fn“,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.avr);fclose(fp1); ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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