C语言程序设计基础_第1页
C语言程序设计基础_第2页
C语言程序设计基础_第3页
C语言程序设计基础_第4页
C语言程序设计基础_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、c语言编程基础,发表教师:代祖华,主要参考文献,C 程序设计 (第二版)和附带的编程问题解和设计指导,谭浩强着,清华大学出版社。 从问题到程序程序设计与C语言引论毛皮宗燕着,机械工业出版社。 与程序设计基础相关的程序设计问题解和设计指导(第二版),吴文虎编着,清华大学出版社。 第8章的文件在程序执行时,程序本身和数据通常存储在存储器中。 程序执行结束后,存储器中存储的数据被释放。 如果需要长期保存程序执行所需的原始数据或程序的执行结果,则需要以文件形式保存在外部存储介质中。 12.1 C语言文件的概要12.2文件的打开和关闭12.3文件的读写操作12.4位置指针和文件的定位12.5错误检测、8

2、.1 C语言文件的概要、1 .文件和文件名文件是指存储在外部存储介质中的数据的集合。 为了识别文件,每个文件都需要文件名。 典型的结构是主文件名 .扩展名文件命名规则,并遵守操作系统的规则。 2 .文件的分类可以从不同的角度对文件进行分类:1.根据文件的内容,分为程序文件和数据文件,程序文件分为源文件、目标文件和可执行文件。 2 .根据文档的组织形式,可以依次访问文档和随机访问文档。 3 .根据文件的存储形式,分为文本文件(ASCII代码文件)和二进制文件。 文本文件(ASCII代码文件)中每个字节包含一个字符,因此每个字符的处理很容易。 但是,一般存储空间多,需要转换时间(二进制和ASCII

3、代码之间的转换)。 二进制文件将内存内的数据直接输出到磁盘文件。 可以节省存储空间和转换时间,但一个字节不支持一个字符,不能直接输出字符格式。 3 .文件的读取和文件的写入文件是指将磁盘文件的数据传输到计算机存储器的操作。 写文件是指从计算机内存向磁盘文件传输数据的操作。 4 .构成文件的基本单元和流文件c语言假定该文件由一个字符(ASCII代码文件)或字节(二进制文件)组成。 把这样的文件称为流文件。 在其他高级语言中,构成文档的基本单位是记录,对文档的操作的基本单位也是记录。 5 .文件类型FILE 1.系统在内存中为每个打开的文件打开存储有关文件的信息(文件名、文件位置等)的区域。 这些

4、信息在系统中定义,并存储在名为FILE的结构类型变量中。 (此结构类型信息见教材288页表8.3 )注意:结构类型名称“FILE”必须大写。 2 .缓冲文件系统以FILE结构类型管理文件,用文件指针读写文件。 每次程序成功打开文件时,都会在内存中创建与该文件对应的FILE结构变量,并返回变量的指针(地址)。 3、文件型指针变量的定义FILE *指针变量识别符示例: FILE * fp; 通过定义指针变量fp,用户程序可以使用该指针访问指定的文件,该变量fp保存与打开的文件相对应的FILE结构的内存地址。 如果有n个文件,则通常设置n个指针变量,以分别指向n个文件,以允许访问文件。 6 .缓冲文

5、件系统是指系统自动地对存储器区域中使用的每个文件打开缓冲器。 从内存向磁盘输出数据时,必须首先输出到缓冲区。 缓冲器满了后,一起输出到磁盘文件。 在从盘文件向存储器读入数据的情况下,相反,首先将数据读入缓存,接着从缓存向程序数据区域一个一个地发送数据。程序数据区域、输出文件缓存器、输入、输入文件缓存器、输出、输入、磁盘、存储器、输出及其概念图如下:非缓存文件系统:不使用缓存的盘文件系统。七、缓冲文件系统文件操作的四个基本步骤:1.定义文件类型指针变量,2 .打开文件,3 .读取或写入文件,4 .文件关闭操作,注:文件操作的库函数,函数原型今后不说明。 注意:主要介绍缓冲文件系统的文件操作函数。

6、8.2打开和关闭文件,在操作文件前,必须打开文件使用完后,必须立即关闭,以免数据丢失。 c语言定义标准输入输出库,用fopen ()函数打开文件,用fclose ()函数关闭文件。 另一方面,文件的打开fopen ()函数1 .使用方法: FILE *fopen (文件名,操作方式 ); 2 .功能:返回指向指定文件的指针。 (1)“文件名”是要打开(或创建)的文件名。 使用字符数组(或字符指针)时,不使用双引号。 (2)“操作方式”如教材第289页的表8.4所示。 例如FILE *fp; fp=fopen(data.99 , r ); 3 .说明(1)如果无法进行打开指定文件的操作,fope

7、n ()函数返回空指针NULL (头文件stdio.h中的值定义为0 )。 为了提高程序的可靠性,if(fp=fopen (文件名,操作方法 )=null ) printf ( cannotopenthisfilen ); exit(0) ,(2)“r(b )”和“a(b )”的差异:如果使用前者打开文件时,读写位置指针指向文件标题,则读写指针指向文件的末尾。 (3)使用文本文件向计算机系统输入数据时,系统会自动将换行代码转换成换行代码输出时将换行字符转换成换行字符和换行字符。 使用二进制文件时,内存中的数据格式与数据文件中的格式完全相同,不进行转换。 (5)在开始执行程序时,系统会自动打开三

8、个标准文件,分别定义了文件指针1 )标准输入文件stdin :到终端的输入(通常是键盘)。 如果程序指定从stdin指定的文件输入数据,则从终端键盘输入数据。 2 )标准输出文件stdout :输出到终端(通常在显示器上)。 3 )标准错误文件stderr :指终端标准错误输出(通常为显示器)。 二、文件关闭fcolse ()函数1 .使用方法: int fclose (文件*文件指针)2.功能:关闭“文件指针”指向的文件。 如果文件成功关闭,函数的返回值为0。否则,返回值不是0。 例如fclose(fp) /*fp指定的文件*/,关闭8.3文件的读写,使得文件打开后可以读写。 另一方面,读取

9、/写入文件中的文字二、读取/写入字符串三、读取/写入数据块四、将文件格式化后进行读取/写入。 1 .文件写入字符函数: fputc,函数返回值:输出成功,返回值为输出字符的输出失败,返回eof (-1的值)。 功能:向fp指定的磁盘文件中写入1个字符ch。 函数原型:int fputc(int ch、FILE *fp )、1、读取/写入文件中的一个字符,例如: FILE *fp; charch=a; fputc(ch,fp ),函数原型:2 .读取文件字符函数:fgetc,fp是指向读取文件的指针变量,int fgetc(FILE *fp ); 函数功能:从文件指针fp指定的文件的当前位置(位

10、置指针)读出一个字符,文件位置指针自动向后移动,指定文件中的下一个字符,返回值是读入的字符。 1、库函数fputs()向指定的文件输出字符串1 )函数原型: int fputs (字符串,文件指针)“字符串”中可以指定字符串常数、字符数组名、字符指针变量名。 2 )功能:在向指定的文件输出字符串的同时,将读写位置指针移动到strlength (字符串长度)字节位置。如果输出成功,函数的返回值为0。否则,返回值为非零值。 2、库函数fgets()从文件中读取字符串1 )函数的原型: char *fgets (指针、字符串长1、文件指针)2)功能:从指定的文件中读取字符串,保存到“字符数组/指针”

11、,末尾自动结束标志同时,使读写位置指针前进strlength (字符串长)字节。 如果在读入规定的长度之前有文件的末尾EOF或换行,则结束读入。 二、读/写字符串fgets ()和fputs ()三、读/写数据块fread ()和fwrite ()实际上,需要一次读/写一个块。 因此,ANSI C标准设置了fread ()和fwrite ()函数。 fread ()和fwrite ()函数通常用于处理二进制文件。 1 .函数的原型int fread(void *buffer、int size、int count、FILE *fp) int fwrite(void *buffer、int siz

12、e、int count, FILE *fp) 2.功能: fread () -从FP指定的文件的当前位置开始,一次读取size字节,重复count次,将读取的数据保存到从buffer开始的存储器中,同时将读写位置指针保存到size * count bar 其中,buffer是保存读入的数据的开头地址。 fwrite ()-从buffer一次输出size字节,重复count次数,将输出的数据存储到fp指向的文件中,同时将读写位置指针移动到size* count字节前。 其中,buffer是输出数据在存储器内的起始地址。 如果fread ()或fwrite ()调用成功,则函数的返回值等于coun

13、t。 例题是教材第296页的示例8.5,4,文件格式化读写fscanf ()和fprintf ()函数与scanf ()和printf ()函数的功能相似,fscanf ()和fprintf ()函数的操作对象是指定文件,scanf () int fscanf (文件指针,“格式”输入变量的开头地址表) int fprintf (文件指针,“格式”“输出参数表”,例如int i=3; 浮动f=9.80; fprintf(fp, -,%6.2f ,I,f ); fprintf ()函数将变量I以-形式,变量f以%6.2f形式,用逗号分隔,输出到fp指定的文件:3,9.80(表示一个空格)。 8.

14、4位置指针和文件的位置,文件中有读写位置指针,指向当前的读写位置。 每次读写一组数据时,系统都会自动将位置指针移动到下一个读写位置。 如果您想改变读写法则,例如系统,请使用以下文件放置函数。 另一方面,位置指针复位函数rewind() 1.使用方法: int rewind (文件指针)2.功能:将文件的位置指针返回到文件标题。 第二,随机读写和fseek ()函数能够对流文件顺序读写和随机读写,重要的是控制文件的位置指针。 顺序读取是指在读取当前数据后,系统会自动将文件位置指针移动到下一个读写位置。 随机读写意味着在读写当前数据后,可以通过调用fseek ()函数将位置指针移动到文件中的任何位

15、置。 1 .函数的原型: int fseek (文件指针、位移量、参照点)2.功能:将指定文件的位置从参照点移动指定的字节数。 (1)参照点:用0 (文件标题)、1 (当前位置)、2 (文件末尾)表示。 ANSI C标准还定义了以下名称: SEEK_SET文件标题、SEEK_CUR当前位置、seek_end-文件末尾(2)位移量:以参照点为起点,前方(位移量为0时)或后方(位移量为0的ANSI C标准中,位移量需要长int型的数据。 fseek ()函数通常用于二进制文件中。 三、由于可以自由移动文件的位置指针,因此返回文件当前位置的函数ftell ()容易频繁移动并且丢失当前位置,因此fte

16、ll ()可以解决该问题。1 .函数的原型: long ftell (文件指针)2.功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。 如果返回值为-1L,则表示调用错误。 例如: offset=ftell(fp ); if (offset=-1l )打印机( ftell () errorn );8.5文件检测函数,一、文件结束检测函数feof函数的原型: int feof(FILE *fp )函数功能:判断fp指向的文件是否位于文件的结束位置,文件结束时返回值为1,否则返回值为0。 二、ferror ()函数在调用输入输出库函数时如果有错误,除了反映函数的返回值外,还可以用ferror ()函数检测。 1 .函数的原型: int ferror (文件指针)2.功能:函数的返回值为0,表示没有错误。如果返回值为0以外的值,则表示错

温馨提示

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

最新文档

评论

0/150

提交评论