文章教程

全国计算机等级考试二级C语言12.1C语言文件的概念

8/22/2020 10:24:52 PM 人评论 次浏览

12.1 C语言文件的概念

考点1 文件的概念和文件指针

真考链接

考点1较简单,属于重点理解重点掌握知识点,在选择题中的考核概率为20%。

1. 文件的概念

在C语言中,对于输入、输出的数据都按“数据流”的形式来处理。输出时,系统不添加任何信息;输入时,逐一读入数据,直至遇到EOF或文件结束标识为止。C程序中的输入、输出文件,都以数据流的形式存储在介质上。

对文件的输入、输出方式也称“存取方式”。在C语言中,有两种对文件的存取方式:顺序存取和直接存取。

顺序存取文件的特点是:每当“打开”这类文件进行读或写操作时,总是从文件的开头到结尾按顺序地读或写;要读第n个字节时,先要读取前n-1个字节,而不能一开始就读到第n个字节,要写第n个字节时,先要写前n-1个字节。

直接存取文件又称随机存取文件,其特点是可以通过调用C语言的库函数去指定开始读(写)的字节号,然后直接对此位置上的数据进行读(写)操作。

数据存放在介质上的形式分为文本形式和二进制形式,因此可以按数据的存放形式分为文本文件和二进制文件。这两种文件都既可以采用顺序方式,又可以采用直接(随机)方式进行存取。

文本文件的特点:当输出时,数据按面值转换成一串字符,每个字符以字符的ASCII代码值存储到文件中,一个字符占一个字节。

当用printf()函数进行输出时就进行了这样的转换,只是在内部处理过程中,指定了输出文件为终端屏幕。反之,当输入时,又把指定的一串字符按类型转换成数据,并存入内存。如当调用scanf()函数进行输入时就进行了这种转换,只是在内部处理过程中,指定了终端键盘为输入文件。

当数据按照二进制数形式直接输出到文件中时,数据不经过任何转换,按计算机内的存储形式直接存放到磁盘上;也就是说,对于字符型数据,每个字符占一个字节,对于int类型数据,每个数据占两个字节,当从二进制文件中读入数据时,不必经过任何转换,而直接将读入的数据存入变量所占内存空间中。在二进制文件中,因为不存在转换的操作,从而提高了对文件输入、输出的速度。

注意:不能将二进制数据直接输出到终端屏幕,也不能从键盘输入二进制数据。

在对文件进行输入或输出时,系统将为输入或输出文件开辟缓冲区。“缓冲区”是系统在内存中为各文件开辟的一片存储区。当对某文件进行输出时,系统首先把输出的数据填入为该文件开辟的缓冲区内,当缓冲区被填满时,就把缓冲区中的内容一次性地输出到对应文件中。当从某文件输入数据时,首先将从输入文件中输入的一批数据放入该文件的内存缓冲区中,输入语句将从该缓冲区中依次读取数据;当该缓冲区中的数据被读完时,再从输入文件中输入一批数据放入缓冲区。这样可以很好地提高读取效率。

2. 文件指针

文件指针是指向一个结构体类型的指针变量,这个结构体中包含有缓冲区的地址、在缓冲区中当前存取的字符位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标识等信息。编程时不必去了解其中的细节,所有一切都在stdio.h头文件中进行了定义。称此结构体类型名为FILE,可以用此类型名来定义文件指针。

定义文件类型指针变量的一般形式为:

FILE* 指针变量名;

例如:

FILE*fp;

fp被定义为指向文件类型的指针变量,称为文件指针。

小提示

在C语言中,文件是一个字节流或二进制流,也就是说,对于输入、输出的数据都按“数据流”的形式进行处理。输出时,系统不添加任何信息;输入时,逐一读入数据,直至遇到文件的结束标识。

顺序存取文件的特点是:每当“打开”文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读写。

常见问题

直接存取文件的特点是什么?

可以通过C语言的库函数去指定开始读(写)的字节号,然后直接对此位置上的数据进行读写操作。

真题精选

若fp是指向某文件的指针,且已读到文件的末尾,则表达式feof(fp)的返回值是(  )。

A.EOF    B.-1    C.非零值    D.NULL

【答案】C

【解析】因为fp的值就是1,故选项A和选项B皆不是正确答案。当文件读到结尾时,feof(fp)为非零值,否则为0。

教程类别