C语言讲稿第十六讲_c语言完整讲稿第03章

2020-02-29 其他范文 下载本文

C语言讲稿第十六讲由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言完整讲稿第03章”。

第十六讲

一、内容概要及重点

1.教学内容:文件(共2学时,本讲2学时)

(1)C文件概述

(2)文件类型指针(3)文件的打开与关闭(4)文件的读写

2.教学目的及要求:

(1)了解c语言文件的概念与类型

(2)了解文件型指针的定义

(3)掌握文件打开与关闭的方法及其意义(4)掌握文件读写函数的使用方法

3.教学重点:

(1)文件的打开与关闭

(2)文件的读写 4.教学难点:

文件的读写

5.主要教学环节的组织:

结合例子、上机、幻灯课件板书掌握文件的概念和用法

二、教学内容

一、C语言文件概述

在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。

如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。

1、文件与文件名

文件是指存放在外部存储介质上的数据集合。

为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。

2、文件分类

可以从不同的角度对文件进行分类:

(1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。(2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。(3)根据文件的存储形式,可分为ASCII码文件和二进制文件。ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。

二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形式。

3、读文件与写文件

所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件是指,从计算机内存向磁盘文件中传送数据的操作。

4、构成文件的基本单元与流式文件

C语言将文件看作是由一个一个的字符(ASCII码文件)或字节(二进制文件)组成的。将这种文件称为流式文件。

而在其它高级语言中,组成文件的基本单位是记录,对文件操作的基本单位也是记录。

5、文件类型FILE

系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。

注意:结构类型名“FILE”必须大写

6、ANSI C的缓冲文件系统

所谓缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。

从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。

二、文件的打开与关闭

对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。C语言规定了标准输入输出函数库,用fopen()函数打开一个文件,用fclose()函数关闭一个文件。

1、文件的打开──fopen()函数

1.用法: FILE *fopen(“文件名”,“操作方式”);2.功能:返回一个指向指定文件的指针。3.函数原型:stdio.h。注:对文件操作的库函数,函数原型均在头文件stdio.h中。

(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。

(2)“操作方式” “r”(只读)

为输入打开一个文本文件 “w”(只写)

为输出打开一个文本文件 “a”(追加)

为追加打开一个文本文件 “rb”(只读)

为输入打开一个二进制文件 “wb”(只写)

为输出打开一个二进制文件 “ab”(追加)

为追加打开一个二进制文件 “r+”(读写)

为读/写打开一个文本文件 “w+”(读写)

为读/写创建一个文本文件 “a+”(读写)

为读/写打开一个文本文件 “rb+”(读写)

为读/写打开一个二进制文件 “wb+”(读写)

为读/写创建一个二进制文件 “ab+”(读写)

为读/写打开一个二进制文件 说明:

1)打开文件的方式,必须与文件的属性兼容。例如,不能以“w”和“a”方式打开具有“只读”属性的文件。但可以以任何方式打开“隐藏”属性文件。

2)DOS/Windows中,无“只写”文件属性,一个文件可写,同时意味着可读。

3)用带“r”的方式(“r”、“rb”、“r+”、“rb+”)打开文件时,若文件不存在,则返回NULL指针。

4)在Turbo C2.0中,用带“a”或带“w”的方式打开文件时,若文件不存在,则创建该文件。但fopen()函数仍可能因为磁盘写保护或目录满而失败。

5)在Turbo C2.0中,用带“a”或带“w”的方式打开文件时,若文件已存在,“a”方式在原文件后追加数据,“w”方式把原文件删除、并重新创建一个相同名字的文件。

例如,FILE *fp;fp=fopen(“data.99”,“r”); 说明:

(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为0)。

为增强程序的可靠性,常用下面的方法打开一个文件: if((fp=fopen(“文件名”,“操作方式”))==NULL){ printf(“can not open this filen”);exit(0);} 关于exit()函数

1)用法:void exit([程序状态值]);2)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。当“程序状态值”为0时,表示程序正常退出;非0值时,表示程序出错退出。

(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。

(3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。

使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。

(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。

(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针: 1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。

2)标准输出文件——stdout:指向终端输出(一般为显示器)。

3)标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。

2、文件的关闭──fcolse()函数

1.用法: int fclose(FILE *文件指针);

2.功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。

例如,fclose(fp);/*关闭fp所指向的文件*/

三、文件的读写操作

文件打开之后,就可以对它进行读与写的操作了。

1.将一个字符写到文件中──fputc()函数

1)用法:int fputc(字符数据,文件指针);其中“字符数据”,既可以是字符常量,也可以是字符变量。

2)功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。

如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)。

2.从文件中读入一个字符──fgetc()函数和feof()函数

(1)库函数fgetc()1)用法:int fgetc(文件指针);2)功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。

例如,fgetc(fp)表达式,从文件fp中读一个字符,同时将fp的读写位置指针向前移动到下一个字符。

(2)关于符号常量EOF 在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。

在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾。

3.库函数feof():

1)用法:int feof(文件指针);2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。feof()函数同时适用于ASCII码文件和二进制文件。

例如,!feof(input))表示源文件(用于输入)未结束,循环继续。

读/写一个字符串──fgets()和fputs()(1)为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行;而遗漏文件名时,提示用户输入。

同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。

4.库函数fputs()──向指定文件输出一个字符串

1)用法:int fputs(字符串,文件指针);其中“字符串”可以是一个字符串常量,或字符数组名,或字符指针变量名。

2)功能:向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节。如果输出成功,则函数返回值为0;否则,为非0值。

5.库函数fgets()──从文件中读一个字符串

1)用法:char *fgets(指针,串长度+1,文件指针);2)功能:从指定文件中读入一个字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志'';同时,将读写位置指针向前移动strlength(字符串长度)个字节。

如果在读入规定长度之前遇到文件尾EOF或换行符,读入即结束。

6.读/写一个数据块──fread()和fwrite()

实际应用中,常常要求1次读/写1个数据块。为此,ANSI C 标准设置了 fread()和fwrite()函数。

1.用法:

int fread(void *buffer,int size,int count,FILE *fp); int fwrite(void *buffer,int size,int count,FILE *fp); 2.功能:

fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节。

其中,buffer是存放读入数据的起始地址(即存放何处)。

fwrite()──从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。

其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数,一般用于二进制文件的处理。对文件进行格式化读/写──fscanf()和fprintf()函数 与scanf()和printf()函数的功能相似,区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。

int fscanf(文件指针,“格式符”,输入变量首地址表);int fprintf(文件指针,“格式符”,输出参量表);例如,......int i=3;float f=9.80;......fprintf(fp,“%2d,%6.2f”, i, f);......fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式,以逗号作分隔符,输出到fp所指向的文件中:□3,□□9.80(□表示1个空格)。

读/写函数的选用原则

从功能角度来说,fread()和fwrite()函数可以完成文件的任何数据读/写操作。但为方便起见,依下列原则选用:

(1)读/写1个字符(或字节)数据时:选用fgetc()和fputc()函数。

(2)读/写1个字符串时:选用fgets()和fputs()函数。

(3)读/写1个(或多个)不含格式的数据时:选用fread()和fwrite()函数。

(4)读/写1个(或多个)含格式的数据时:选用fscanf()和fprintf()函数。

三、习题

13.4

综合作业

《C语言讲稿第十六讲.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C语言讲稿第十六讲
点击下载文档
相关专题 c语言完整讲稿第03章 讲稿 语言 c语言完整讲稿第03章 讲稿 语言
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文