江南大学C语言程序设计本科第十三章_第1页
江南大学C语言程序设计本科第十三章_第2页
江南大学C语言程序设计本科第十三章_第3页
江南大学C语言程序设计本科第十三章_第4页
江南大学C语言程序设计本科第十三章_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编辑ppt回顾v结构体的使用v共用体的使用v枚举变量v结构体数组v结构体指针v链表的使用编辑ppt问题1.前面题目的结果是后面的输入时?2.程序运行的结果需要长期保存,或有其他用途时?3.调试程序时,输入数据量多?引入文件第第1313章章 文件文件掌握文件的打开和关闭掌握文件的打开和关闭掌握并能熟练使用以下函数掌握并能熟练使用以下函数fputc( ) fgtc( ) fgets( ) fputs( )fread( ) fwrite( ) fprintf( ) fscanf( ) Focus编辑ppt一、文件的基本概念一、文件的基本概念 1、文件的一般概念、文件的一般概念 文件文件(file):

2、 存储在外部介质上数据的集合。存储在外部介质上数据的集合。OS 将外部设备也看作文件将外部设备也看作文件,终端的键盘终端的键盘/显示器均看作显示器均看作I/O文件文件C语言中常用的文件语言中常用的文件程序文件程序文件数据文件数据文件设备文件设备文件第一节第一节 c文件概述文件概述2、C的文件系统的文件系统 缓冲文件系统:系统自动为每个正在使用的文件系统在缓冲文件系统:系统自动为每个正在使用的文件系统在内存中开辟一个缓冲区。程序与文件之间的内存中开辟一个缓冲区。程序与文件之间的I/O 经由缓冲区。经由缓冲区。ANSI C标准采用缓冲文件系统。标准采用缓冲文件系统。 非缓冲文件系统:非缓冲文件系统

3、: 系统不自动开辟缓冲区,由程序为每个文件设定缓冲区。系统不自动开辟缓冲区,由程序为每个文件设定缓冲区。 由于由于C与与UNIX 关系密切,关系密切,UNIX I/O 系统使用非缓冲文件系统使用非缓冲文件系统,因而多数系统,因而多数C也兼容之。也兼容之。程序数据区程序数据区输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区输出输出输入输入输入输入输出输出磁盘磁盘缓冲文件系统缓冲文件系统编辑pptC的的I/O系统在程序员和设备间提供了一级抽象。这个抽系统在程序员和设备间提供了一级抽象。这个抽象被称为象被称为流(流(stream),而实际设备则称为,而实际设备则称为文件文件(files) 。

4、文件由文件由缓冲文件系统缓冲文件系统变换成抽象的逻辑设备流。变换成抽象的逻辑设备流。C文件是字符(文本)流或二进制流,无其它高级语言文件是字符(文本)流或二进制流,无其它高级语言所具有的记录界限,所具有的记录界限,存取以字节为单位存取以字节为单位。I/O的开始和结的开始和结束束仅受仅受程序控制程序控制而不受流中符号的控制而不受流中符号的控制 。 共有两类流:共有两类流:文本流文本流(text)和二进制流和二进制流(binary)。二、文件流与文件二、文件流与文件文本流文本流 文本流文本流(text stream)是一种是一种字符序列字符序列。以。以ASCII 码码存存放,每字符占一个字节。数值

5、需要逐位转换,放,每字符占一个字节。数值需要逐位转换,32767存为存为51、50、55、54、55 计五个字节。计五个字节。n变为一个回车变为一个回车/换换行符号对(行符号对(CR/LF carraige return/line feed )ASCII 码码13、10。文件末有一字符。文件末有一字符 z , ASCII 码为码为 26。二进制流二进制流 二进制流二进制流(binary stream)是一种是一种字节序列字节序列,数值以,数值以二进制数二进制数表示。表示。32767存为存为7FFFH,int 型时占两个字节型时占两个字节。不需转换不需转换、节省存储空间,从而方便存取、提高速度。

6、、节省存储空间,从而方便存取、提高速度。标准流标准流 ANSI C 有三个预定义的标准流:有三个预定义的标准流:stdin、stdout 、stderr ,也称为标准也称为标准/文件。它们都对应终端。程序运行时系统自动文件。它们都对应终端。程序运行时系统自动将它们打开,运行结束自动关闭。将它们打开,运行结束自动关闭。例如:使用例如:使用scanf( )、gets( )等函数时使用等函数时使用stdin 流,对应标准输入流,对应标准输入-键盘键盘; 使用使用printf( )、puts( ) 时,使用时,使用stdout 流,对应标准输出流,对应标准输出-显示器。显示器。stderr 流流也对应

7、标准输出也对应标准输出-显示器。显示器。 编辑ppt三、三、 文件的基本操作步骤文件的基本操作步骤 打开文件打开文件读写读写(创建创建)文件文件关闭文件关闭文件编辑ppt在在“stdio.h” 中中(QC) struct _iobuf char _FAR_ *_ptr; int _cnt; char _FAR_ *_base; char _flag; char _file; ;typedef struct _iobuf file ;例如:例如:file *fp1, *fp2;typedef struct int _fd ; /* 文件号文件号 */ int _cleft ; /* 缓冲区剩下的

8、字符缓冲区剩下的字符 */ int _mode ; /* 文件操作模式文件操作模式 */ char *_nextc ; /* 下一个字符指针下一个字符指针 */ char *_buff ; /*文件缓冲区指针文件缓冲区指针 */ file;四、四、 指向文件的指针变量指向文件的指针变量编辑ppt1. 打开文件打开文件 file *fp ; fp=fopen( , mode); 为文件名为文件名(路径名路径名)。mode对文件的访问方式对文件的访问方式一般方法如下:一般方法如下: file *fp; if (fp=fopen(“c:docexam.txt”,“w”) = = NULL) puts

9、(“cannot open the filen”); exit(1); 第二节第二节 文件的打开与关闭文件的打开与关闭 mode 意意 义义 “r” 读文本文件读文本文件 “w” 写或创建文本文件写或创建文本文件 “a” 向文本文件追加向文本文件追加 “rb” 读二进制文件读二进制文件 “wb” 写或创建二进制文件写或创建二进制文件 “ab” 向二进制文件追加向二进制文件追加mode 意意 义义 “r+” 读写文本文件读写文本文件 “w+” 读写读写(创建创建)文本文件文本文件 “a+” 向文本文件追加向文本文件追加 “rb+” “读打开读打开”二进制文件二进制文件 “wb+” 读写读写(创建

10、创建)二进制文件二进制文件 “ab+” 向二进制文件读写向二进制文件读写(追加追加) 2. 关闭文件关闭文件 fclose();或:或: if(fclose() printf(“close error”);exit(2); 使用使用FILE类型和类型和fopen( )、fclose( )函数应包含函数应包含stdio.h 编辑ppt1. 输入输出字符输入输出字符 1)I/O字符字符 ch=fgetc(fp); fputc(ch,fp);第三节第三节 读写文件读写文件putchar(ch)实际上是用实际上是用fputc(ch, fp)定义的一个宏定义的一个宏: #define putchar(c

11、h) fputc(ch, stdout) 默认输出到显示器即标准输出文件默认输出到显示器即标准输出文件stdout 2)判断文件尾)判断文件尾 fgetc( )在读到文件末尾时,返回文件结束标志在读到文件末尾时,返回文件结束标志EOF(在在stdio.h中定义为中定义为 1)。此标志只适合于文本文件此标志只适合于文本文件,因,因为二进制文件中的数值为二进制文件中的数值-1会与其相混,造成提前结束。常会与其相混,造成提前结束。常用用feof( )函数测试文件尾。若是文件结束返回值函数测试文件尾。若是文件结束返回值1。它既。它既可以用于二进制文件也可以用于文本文件。可以用于二进制文件也可以用于文本

12、文件。 feof(文件指针文件指针 ) 返回值为返回值为1表示文件结束表示文件结束例:假设软盘例:假设软盘a的根目录下有一个的根目录下有一个ASCII码文件码文件“abcdat”,其内容为,其内容为“I am a student”。编程完。编程完成成: (1)显示文件显示文件“abc.dat”的内容。的内容。 (2)把字符串把字符串“You are a worker”写入文件写入文件“abc.dat。 (3)再次显示文件再次显示文件“abc.dat”的内容。的内容。 分析:显示指定的文本文件内容,再写入新内容,必须分析:显示指定的文本文件内容,再写入新内容,必须打开文件并指定文件的使用方式为打

13、开文件并指定文件的使用方式为”r+”,表示对同一个,表示对同一个文本文件先读后写。文本文件先读后写。写入的新内容覆盖原有的旧内容写入的新内容覆盖原有的旧内容。 程序清单如下:程序清单如下: #includemain() FILE *fp; char *str”You are a worker”;int k; if(fp=fopen(“a:abc.dat”,“r+”)NULL) * fp为为NULL,表示文件打开失败,表示文件打开失败*/ printf(“文件不存在文件不存在n”);exit(O); while(!feof(fp) *当文件没有结束时,当文件没有结束时,feof(fp)为假,为假

14、,!feof(fp)为真为真* putchar(fgetc(fp);*显示文件显示文件“abcdat”的原有内容的原有内容* printf(“n”);I am a studentz rewind(fp); *把文件的位置指针移到文件的开始处把文件的位置指针移到文件的开始处* for(k0; strk!0;k+) fputc(strk,fp); *写入新内容写入新内容* rewind(fp);*把文件的位置指针移到文件的开始处把文件的位置指针移到文件的开始处* while(!feof(fp) *当文件没有结束时,当文件没有结束时,feof(fp)为假,为假,!feof(fp)为真为真* putc

15、har(fgetc(fp);*显示文件显示文件“abcdar”的新内容的新内容* fclose(fp); printf(“n”); 运行结果:运行结果:I am a student You are a workerI am a studentz Y YouYou are a workerz Yo 2. 输入输出数据块输入输出数据块 一次可一次可I/O一个数组或结构体类型的数据一个数组或结构体类型的数据 ANSI C 设置了两个函数:设置了两个函数: fread(buffer, size, count, fp) fwrite(buffer, size, count, fp) buffer:是一个

16、指针。对:是一个指针。对fread来说,它是读入数据的存放地来说,它是读入数据的存放地址。对址。对fwrite来说,是要输出数据的地址来说,是要输出数据的地址(以上指的是起始地址以上指的是起始地址)。 size:要读写的字节数。:要读写的字节数。 count:要进行读写多少个:要进行读写多少个size字节的数据项。字节的数据项。 fp:文件型指针。:文件型指针。例例: 文件文件sru_list中有中有4个学生的有关数据,将它们读出在个学生的有关数据,将它们读出在屏幕上显示出来,然后把它们重新存到磁盘文件上去。屏幕上显示出来,然后把它们重新存到磁盘文件上去。# include “stdio. h

17、”# define SIZE 4 struct student_type char namel0 ; int num ; int age ; char addr l5 ; stud SIZE ;main ( ) FILE *fP; int i; if (fp=fopen(stu_list, ”rb+) = =NULL) printf ( cannot open filexn ); return; for (i = 0 ;iSIZE ;i+ +) fread(&studi,sizeof(struct student_type),1,fp); printf(“%-10s %4d %4d %

18、-15sn”, ,studi.num, studi.age,studi.addr); for (i= 0;iSIZE ;i+ + ) if (fwrite (&studi,sizeof(struct student_type),1,fp)! = 1) printf( errorn); 3. 格式化格式化I/O fprintf(fp, 格式字符串格式字符串,输出表列输出表列 ) fscanf(fp,格式字符串格式字符串,输入表列输入表列 ) 除除fp外,其余同外,其余同printf( ),scanf( ) 4. 串输入输出串输入输出 fgets(str1, n, fp

19、) 从从fp指定的文件中读出指定的文件中读出n-1个字符到个字符到str1,并在最后添,并在最后添加一个加一个0.或遇换行符、或遇换行符、EOF符停止符停止。 fputs( str2, fp) 把把str2的内容输出到的内容输出到fp指定的文件中,指定的文件中, str2可以是字符串常量、字符数组、字符型指针。可以是字符串常量、字符数组、字符型指针。 注:使用方法与注:使用方法与getsputs类似类似 例例: 从键盘输入数据从键盘输入数据“97101,李明李明,男男,20 ”和和“97102,王小丽王小丽,女女,18 存放在文件存放在文件txtl.dat”中。再将文件中。再将文件txtl.d

20、at”的数据读出并显示。的数据读出并显示。 #include struct std long xh; char name7; char sex3; int nl; ; main( ) FILE *fp; struct std a; int i; if (fp=fopen(“txt1.dat”,“w+”)=NULL) * fp为为NULL,表示文件打开失败,表示文件打开失败*/ printf(“磁盘空间不够磁盘空间不够n”); exit(0); for (i=0;i2;i+) scanf (“ldsd”,&a.xh,a.sex,&a.n1) ; gets () ; *

21、从键盘读数据从键盘读数据 * fprintf (fp, “ld s dn”, a.xh, a.sex, a.n1) ; fputs (, fp) ; *向文件写数据向文件写数据* rewind (fp) ; printf (“文件中的数据为:文件中的数据为:n”) ; while ( !feof(fp) ) fscanf(fp,“ldsdn”,&a.xh,a.sex,&a.n1); fgets(,7,fp); *从文件中读数据从文件中读数据* printf(“ld,s,dn”,a.xh,a.sex,a.n1); puts(); *在终端上显示

22、数据在终端上显示数据* fclose(fp); (1). 返回文件开头返回文件开头 rewind(fp) (2). 随机定位随机定位 fseek(fp, 偏移量,基点)偏移量,基点) 基点基点 名字名字 数字表示数字表示 文件开始文件开始 SEEK_SET 0 文件当前位置文件当前位置 SEEK_CUR 1 文件末尾文件末尾 SEEK_END 2 偏移量可以偏移量可以 +/- 编辑ppt课堂例题课堂例题课后练习课后练习上机作业上机作业fscanf函数的正确调用形式是函数的正确调用形式是 _A. fscanf(文件指针,格式字符串,输出表列);(文件指针,格式字符串,输出表列);B. fscan

23、f(格式字符串,文件指针,输出表列);(格式字符串,文件指针,输出表列);C. fscanf(格式字符串,输出表列,文件指针);(格式字符串,输出表列,文件指针);D. fscanf(文件指针,格式字符串,输入表列);(文件指针,格式字符串,输入表列);DC语言标准库函数语言标准库函数fgets(string,n,fp)的功能是的功能是_。A. 从文件从文件fp中读取长度为中读取长度为n的字符串存入指针的字符串存入指针string指指向的内存向的内存B. 从文件从文件fp中读取长度为中读取长度为n-1的字符串存入指针的字符串存入指针string指向的内存指向的内存C. 从文件从文件fp中读取中

24、读取n个字符串存入指针个字符串存入指针string指向的内指向的内存存D. 从文件从文件fp中读取长度不超过长度为中读取长度不超过长度为n的字符串存入的字符串存入指针指针string指向的内存指向的内存B 输出结果为输出结果为_ #include FILE *fp ; main( ) int s=0 , i, a4=15,25,33,58 , b ; if ( (fp=fopen(data.txt,w) ) = NULL) printf(“errorn”); exit(0); for (i=0; i4; i+) fprintf ( fp, “%d,”, ai ) ; fclose (fp) ; if( (fp=fopen(data.txt,r) ) = NULL ) printf(“cannot open this

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论