C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章

上传人:E**** 文档编号:89190652 上传时间:2019-05-21 格式:PPT 页数:27 大小:281KB
返回 下载 相关 举报
C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章_第1页
第1页 / 共27页
C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章_第2页
第2页 / 共27页
C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章_第3页
第3页 / 共27页
C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章_第4页
第4页 / 共27页
C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版) 教学课件 ppt 作者 刘加海 朱云其第八章 第八章(27页珍藏版)》请在金锄头文库上搜索。

1、第8章,文件的操作及其应用,Company Logo,本章重点 文件的概念与文件的作用。 文件的读写。 文件的打开与关闭。 文件结束的判断方法。 文件操作中常用的函数:fputc、fgetc、 fscanf、fprintf、fread、fwrite。,Company Logo,本章难点 文件指针的概念。 文件读写的概念。 文件结束的判定。 文件操作中常用函数的应用。,Company Logo,8.1文 件 概 述,文件是指有名字的一组相关信息的集合。在C语言中设备也作为文件处理,例如,终端键盘为标准输入文件,其文件名stdin;显示器和打印机为标准输出文件,其文件名stdout。 在stdio

2、.h文件中有以下文件类型声明:,typedef struct short level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *baffer; /*数据缓冲区的位置*/ unsigned ar *curp; /*指针,当前的指向*/ unsigned istemp; /*临时文件,指示器*/ short token; /*用于有效性检查*/ FILE;,Comp

3、any Logo,对文件的操作可通过指向该文件结构体变量的指针变量进行。用户在程序中声明指向文件结构体变量的指针,格式如下: FILE *文件结构体指针变量 例如: FILE *fp1,*fp2,*fp3;,Company Logo,8.2 文件打开与关闭函数,在文件的操作中,经常会涉及到文件的读/写操作,数据从磁盘流到内存称为“读”,数据从内存流到磁盘称为“写”。读写操作的含义如图8.2所示。,图8.2 文件读/写操作的含义,处理文件的一般过程为“打开文件读/写文件关闭文件”。,Company Logo,8.2.1 文件打开函数fopen 函数原型如下: FILE *fopen(char *

4、filename,char *mode) 调用方式如下: fp1=fopen(“文件名“,“模式“); 函数功能为打开以字符串filename为文件名的文件,函数的返回值为指向该文件的FILE类型变量的首地址,当打开文件失败时,返回NULL。 fopen( )函数中第一个形式参数filename表示文件名,可以包含路径和文件名两部分。第二个形式参数mode表示打开文件的类型。关于文件类型的规定参见表8.1。,Company Logo,表8.1 文件操作类型,Company Logo,例如: fp=fopen(“k.c“, “r+“); 表示打开当前目录下的文件k.c,文件可读可写。 如果要打开

5、一个vc目录中文件名为k.txt的文本文件进行读操作,可写成 fopen(“vck.txt“,“r“);,8.2.2 文件关闭函数fopen 函数原型如下: int fclose(FILE *stream); 调用方式如下: fclose(fp); 函数功能为返回一个整型数。当文件关闭成功时,返回0,否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。,Company Logo,【例8.1】 以只读方式打开一个文件名为k1.txt的文件,并判断文件是否成功打开与关闭。,点击查看代码,Company Logo,8.3文件中字符的读/写函数,文件打开以后,就可以对它进行读/写操作了。要实

6、现顺序读/写文件,首先要熟悉文件的输入/输出函数。常用的函数介绍如下。 1. 文件中字符读函数fgetc 函数原型如下: int fgetc(FILE *fp) 调用方式如下: ch=fgetc(fp); 函数功能为从fp指向的位置读取一个字符,将字符的ASCII值赋给ch。如果在执行函数fgetc时遇到文件结束符,函数返回一个文件结束标志EOF(1)。读入字符后,文件读/写位置向后移动一个字节。,Company Logo,2. 文件中字符写函数fputc 函数原型如下: int fputc(char ch, FILE *fp) 调用方式如下: fputc(ch,fp); 函数功能:在fp指向

7、的位置写入一个字符(ch的值)。写入字符成功,函数返回值为该字符的ASCII值;写入不成功,则返回值为EOF(1)。写入字符后,文件的读/写位置向后移动一个字节。 注意: 1)在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为1),也可以使用库函数feof( )来判断是否遇到文件尾。 2)在对二进制文件执行读入操作时,必须使用库函数feof( )来判断是否遇到文件尾。,Company Logo,【例8.2】 将键盘上输入的一个字符串(以“”作为结束字 符),以ASCII码形式存储到一个磁盘文件k2.txt中。,点击查

8、看代码,程序运行情况如下: abcdefg1234567,通过搜索可以找到文件k2.txt,检查是否已写入了以上字符。,Company Logo,上机操作与练习2,编写一个程序,将从键盘中输入的数字字符、大写字母写入C盘根目录下的k3.txt文件中,当输入“#”号时结束。,【例8.3】 把例8.2中创建的文件k2.txt中的字符显示在屏幕上。,点击查看代码,也可以把此程序设计为命令行参数的形式,打开什么文件可以在程序运行时决定。 此时的程序代码如下:,点击查看代码,如把此程序保存为file.c,经过编译连接后,在Dos提示符下,输入命令行参数:file k2.txt。,Company Logo

9、,8.4 文件中格式化读/写函数,文件中格式化读/写函数为fscanf( )和fprintf( ),与scanf( )和printf( )函数的功能相似,区别在于:fscanf( )和fprintf( )函数的操作对象是指定文件,而scanf( )和printf( )函数的操作对象是标准输入文件stdin及输出文件stdout。 1. 文件的格式化读函数 函数原型如下: int fscanf(FILE *fp,char *format,内存地址列表); 函数功能为从fp所指向文件的当前位置开始,以给定的格式读数据,并赋给内存变量,数据从文件流向内存;同时,将读/写位置指针后移。 例如: fsc

10、anf(fp,“%2d %c“, 它表示在fp所指向的文件按%2d格式读一个整型数赋给变量i,按%c格式读一个字符赋给变量ch。,Company Logo,2. 文件的格式化写函数 函数原型如下: int fprintf(FILE *stream,char *format,变量列表); 函数功能为把变量列表中的数据以给定的格式写入文件fp所指向的当前位置。 例如: int i=3; float f=9.80; fprintf(fp,“%2d,%6.2f“, i, f); 它表示将变量i按%2d格式、变量f按%6.2f格式, 以逗号作分隔符,写到fp所指向的文件中。,Company Logo,【

11、例8.4】 从键盘输入一个字符串和一个十进制整数,将它们写入k4.txt文件中,然后再从k4.txt文件中读出并显示在屏幕上。,点击查看,【例8.5】 计算y=sinx的值,x从0到360,以1位整数、2位小数的形式写入文件k5.txt中。,分析:在循环中每计算一个数都应以“%4.2f”的格式写入文件,另外每个数之间都应有空格,写数据时可同时写入一个空格,以分隔写入的数据。,点击查看,Company Logo,上机操作与练习4,1. 从键盘读入若干整数,存入文件k6.txt中,当读入0时结束。,Company Logo,8.4文件中数据块读/写函数,实际应用中,常常要求一次读/写一个或若干个数

12、据块。C语言中提供了数据块的读/写函数fread( )和fwrite( )。 1. 文件中数据块读函数fread 函数原型如下: int fread(void *buffer,int size,int n,FILE *fp); 函数功能为从fp所指向文件的当前位置开始,一次读入size个字节,重复n次,并将读入的数据存放到从buffer开始的内存中;同时,将读/写位置指针向前移动size* n个字节。其中,buffer是存放读入数据的内存起始地址(即存放何处)。,Company Logo,2. 文件中数据块写函数fwrite 函数原型如下: int fwrite(void *buffer,in

13、t size,int n,FILE *fp); 函数功能为从buffer开始,一次输出size个字节,重复n次,并将输出的数据存放到fp所指向的文件中;同时,将读/写位置指针向前移动size* n个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。 如果调用fread( )或fwrite( )成功,则函数返回值等于n。 fread( )和fwrite( )函数一般用于二进制文件的处理。 如果有一个结构体数组stu有6个元素,每个元素用来存放一个学生的数据(包括姓名、学号、年龄、成绩),则结构体如下:,Company Logo,struct student_type c

14、har name10; int num; int age; float score; stu6; 假设学生的数据已存放在磁盘文件中,可以用下面的语句读6个学生信息到内存。 for(i=0;i6;i+) fread(,Company Logo,【例8.6】 从键盘输入若干个学生数据,把它们转存到磁盘文件k8.dat中去。假设学生的有关信息是一个结构体类型数据,有姓名name10、学号num、年龄age、成绩score等,程序设计如下:,点击查看程序,【例8.7】 试编写程序,将例8.6新建k8.dat文件的数据读出并将其输出到屏幕上。,点击查看程序,Company Logo,8.6 文件中位置定

15、位函数,1. 位置指针复位函数rewind 函数原型如下: int rewind(文件指针); 调用方式如下: rewind(fp); 函数功能为使文件的位置指针返回到文件头。此函数没有返回值。,Company Logo,【例8.8】 文本文件k10.txt中含有大小写字母,试把文本文件中的小写字母转化为大写字母。,分析:将从文件中读出的一个小写字母转化为大写字母后,先存入数组,待完成后用反绕(rewind)函数重新定位在文件头,然后再写回文件。,#include #include int main( ) FILE *fp; char ch,str500; int k=0,j; if(fp=f

16、open(“k10.txt“,“r+“)=NULL) printf(“file can not openn“); exit(0); ,while(!feof(fp) ch=fgetc(fp); if(ch=a ,Company Logo,2. 随机读/写函数fseek 对于流式文件,既可以顺序读/写,也可以随机读/写,关键在于控制文件的位置指针。所谓顺序读/写,是指读/写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。所谓随机读/写,是指读/写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方。 函数原型如下: int fseek(文件指针,位移量,参照点); 函数功能为将指定文件的位置指针从参照点开始移动指定的字节数。函数调用形式如下: fseek(fp,offset,origin);,Compa

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

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

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