《c语言教学资料》PPT课件

上传人:资****亨 文档编号:212340622 上传时间:2021-11-19 格式:PPT 页数:47 大小:295.50KB
返回 下载 相关 举报
《c语言教学资料》PPT课件_第1页
第1页 / 共47页
《c语言教学资料》PPT课件_第2页
第2页 / 共47页
《c语言教学资料》PPT课件_第3页
第3页 / 共47页
《c语言教学资料》PPT课件_第4页
第4页 / 共47页
《c语言教学资料》PPT课件_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《《c语言教学资料》PPT课件》由会员分享,可在线阅读,更多相关《《c语言教学资料》PPT课件(47页珍藏版)》请在金锄头文库上搜索。

1、第8章 文件,第8章 文件,8.2 文件的打开与关闭,8.3 文件的读写,8.4 文件的指针定位,8.1 文件概述,8.5 文件的其他检测函数,8.6 特殊的文件名,8.1 文件概述,文件是存在计算机存储介质中的一些信息的集合。 文件是一些记录(record)的集合。记录就是具有一定关系的信息的集合。在计算机中,将二进制代码的集合称为信息。文件的种类有很多。例如:文本文件,系统文件,图形、图像文件,视频文件,音频文件等等。每个文件都有一个名字,称之为文件名。 文件的名字由两部分组成,文件名和扩展名(也称为文件后缀)。文件名和扩展名之间用一个“ . ”号分开。扩展名是说明文件的属性。,8.1 文

2、件概述,C语言在处理信息方面采用的是两种处理方法,一种是将文件看成是ASCII码的集合,在处理这个集合时以ASCII码为单位处理。由ASCII码组成的文件,又称为文本文件。另一种是将文件看成是二进制代码的集合。 所谓文本文件,是把内存中的数据转变成相应的ASCII码值形式,然后存放在磁盘上。因此,每个字节存放一个字符的ASCII码值。所谓二进制文件,是把内存中的数据按其在内存中的存储形式原样存放到磁盘上去,8.1 文件概述,short int 数据32767,32767的各字符的ASCII码存放形式,内存存放形式,8.1 文件概述,数据按文本形式存储在磁盘上,占用的存储空间多,存储时要花费转换

3、时间。但以这种形式存储,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出显示 数据按二进制形式存储在磁盘上时,无须花费转换时间,占用空间少。但字节不与字符对应,因此不能直接输出显示,8.1 文件概述,缓冲文件系统输出时,先将数据送到内存缓冲区,缓冲区装满后,才将整个缓冲区的内容一次写入磁盘输入时,先把磁盘中的一块数据读入到内存缓冲区,然后再从缓冲区中把需要的数据挑出来,送到程序数据区中,8.2 文件的打开与关闭,C语言执行程序在文件处理上有两种方式:一种是借助操作系统的外壳功能完成C程序在运行的过程中,数据的输入和输出,方式简单,条件比较苛刻。 。另一种方式是完全借助C语言的一些文件处

4、理函数来完成C语言程序运行过程中的数据读入和输出,比较复杂,但功能强大。1利用操作系统命令打开输入和输出文件。具有很大的局限性,比如:读取数据只能从头开始读取,不可剪裁读取数据,也不可对数据回读,输入和输出的数据文件只能是文本文件等。(略),8.2 文件的打开与关闭,8.2.0.2 利用函数处理文件在缓冲文件系统中,对每个正在使用的文件都自动分配一个FILE类型的结构体变量,用于存放文件的有关信息,如文件号、文件状态、缓冲区地址和大小等typedef struct int level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd;

5、/*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ int bsize; /*缓冲区大小*/ unsigned char *buffer; /*数据缓冲区位置*/ unsigned char *curp; /*文件定位指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/FILE;,8.2 文件的打开与关闭,C语言对于每一个要操作的文件,都必须定义一个指针变量,指向该文件结构体变量,这个指针称为文件指针FILE *指针变量标识符;打开文件操作:FILE *fp;fp=fopen(文件名称,使用文

6、件方式);关闭文件操作:fclose(fp);,C文件操作常用函数,8.2 文件的打开与关闭,8.2 文件的打开与关闭,#include void main() int a16,i,j,t; FILE *fp1,*fp2; fp1=fopen(in.dat, r); fp2=fopen(out.dat, w); for(i=0;i16;i+) fscanf(fp1,%d, ,【例8-1】若输入下列无序矩阵,得到一个排序矩阵:,8.2 文件的打开与关闭,for(i=0;i16;i+) for(j=i+1;j16;j+) if(aiaj) t=ai;ai=aj;aj=t; fprintf(fp2,

7、*output data are*n); for(i=1;i=16;i+) fprintf(fp2,%3d,ai-1); if(i%4=0) fprintf(fp2,n); fclose(fp1); fclose(fp2);,8.2 文件的打开与关闭,我们使用了两个函数一个是fscanf,另一个是fprintf。我们在表对比一他们与标准输入输出函数scanf、printf的区别。,8.2 文件的打开与关闭,为了使得上述的程序更加完善,确保程序在运行过程中的正确性。这里我们引入一个新的函数exit(0),这个函数是结束程序的运行。,FILE *fp1,*fp2;if(fp1=fopen(in.d

8、at, r)=NULL) printf(cannot open infilen); exit(0); /不正确退出运行if(fp2= fopen(out.dat, w)=NULL) printf(cannot open outfilen);exit(0); /不正确退出运行,8.3 文件的读写,8.3.0.1 fscanf()和fprintf()函数在上一小节中我们看到了这个函数的使用,他们的格式是:fscanf(文件指针,格式字符串,输入列表);fprintf(文件指针,格式字符串,输出列表);在他们的格式中,除了文件指针,其他的格式和scanf()和 printf()函数是一致的。但是在使

9、用中要注意写入的格式和读出的格式有一定的区别。,8.3 文件的读写,#include void main() FILE *fp; int i,k,n; fp=fopen(data.dat, w); for (i=1;i6;i+) fprintf(fp, %d,i); if(i%3=0) fprintf(fp,n); fclose(fp); fp=fopen(data.dat, r); fscanf(fp, %d%d,【例8-2】分析下列程序的写入和读出的过程。,8.3 文件的读写,8.3.0.2 fputc()和 fgetc()(1)函数的功能就是将字符写入到fp所指向的文件中去。它在语言的头

10、文件中定义的格式为:int fputc(int c,FILE *fp);调用方式为:fputc(ch,fp);ch是一个字符变量,也可是字符常量。fp是文件的指针。如果输出成功,这个函数返回的值就是这个函数输出的字符,否则,返回EOF(也就是-1)。,【例8-3】从键盘输入一段文字,以回车作为结束符,写入到指定的文件中。,#include #include void main() FILE *fp; char ch,filename12; printf(Please input filename:); scanf(%s,filename); if(fp= fopen(filename, w)=

11、NULL) printf(cannot open input-file:%sn,filename); exit(0); printf(Please begin input string:n); ch=getchar(); while(ch=getchar()!=n) fputc(ch,fp); fclose(fp);,8.3 文件的读写,(2)fgetc()函数是从一个打开的磁盘文件中读取一个字符,它在语言的头文件中定义的格式为:int fgetc(*fp);调用方式为:ch=fgetc(fp);其中ch是一个字符变量。fp是一个文件的指针。,【例8-4】输入已存在的.txt文件名,将其内容显

12、示在计算机屏幕上。,#include #include void main() FILE *fp; char ch,filename12; printf(Please input filename:); scanf(%s,filename); if(fp= fopen(filename, r)=NULL) printf(cannot open input-file:%sn,filename); exit(0); printf(begin output string:n); while(ch=fgetc(fp)!=EOF) putchar(ch); putchar(n); fclose(fp);

13、,8.3 文件的读写,#include void main(int argc,char *argv) FILE *fp1,*fp2; char ch; if (argc!=3) printf(“Input argument error!”);exit(0); if(fp1=fopen(argv1, “r”)=NULL) printf(“cannot open source-file:%sn”,in_file); exit(0); if(fp2= fopen(argv2, “w”)=NULL) printf(“cannot open object-file:%sn”,out_file); exi

14、t(0); while(ch=fgetc(fp1)!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2);,【例8-5】完成文件复制,8.3 文件的读写,8.3.0.3 fread() 函数和fwrite()函数这两函数也是向一个打开的文件内写入和读出数据。但使用方式有所不同。(1)fwrite()是将某一个二进制数据写入到磁盘文件中。该函数的格式为:int fwrite(void *buffer,int num_byte,int count,fp);void *buffer 数据缓冲区。int num_byte 所要读取文件的字节数。int count

15、注明所要读取数据的倍数。fp 文件指针。,8.3 文件的读写,【例8-6】将下列矩阵的数据保存在给定的数据文件中。,#include #include #include #define COL 4#define ROW 3#define F 16,void main() FILE *fp;float a34=1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1,10.1,11.1,12.1; char w_name10; int i,j; float (*p)4; printf(Please input w_name:); scanf(%s,w_name); if(fp=fo

16、pen(w_name,wb)=NULL) printf(Cannot open filen);exit(0); p=a; for (i=0;iROW;i+) fwrite(p+i,F,COL,fp); fclose(fp);,8.3 文件的读写,(2)fread()是将某一个二进制数据读入到数据缓冲区。该函数的格式为:int fread(void *buffer,int num_byte,int count,fp);该函数共有四个参数void *buffer 数据缓冲区。int num_byte 所要读取文件的字节数。int coun 注明所要读取数据的倍数。fp 文件指针。,#include #include #include #define COL 4#define ROW 3,【例8-7】将例8.6中data.dat文件中的数据读入到一个数组中。,void main() FILE *fp; float b34=0; /读出用写入的同种方式 char r_name10; int i,j; float (*p)4; printf(Please input r_name:); scan

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

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

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