计算机等级考试二级C语言程序设计第16章_第1页
计算机等级考试二级C语言程序设计第16章_第2页
计算机等级考试二级C语言程序设计第16章_第3页
计算机等级考试二级C语言程序设计第16章_第4页
计算机等级考试二级C语言程序设计第16章_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

本章重点16.1C语言文件的概念16.2文件指针16.3打开文件16.4关闭文件16.5调用getc(fgetc)和putc(fputc)函数进行输入和输出16.6判文件结束函数EOF16.7fscanf函数和fprintf函数16.8fgets函数和fputs函数16.9fread函数和fwrite函数16.10文件定位函数,第16章文件,16.1C语言文件的概念文件是一种保存数据的基本数据结构,在逻辑上可认为文件是记录在外部介质上的数据的集合。对文件输入输出方式也称“存取方式”。C语言中,有两种对文件的存取方式:顺序存取和直接存取。,顺序存取文件的特点是:每当“打开”这类文件进行读或写操作时,总是从文件的开头开始,从头到尾顺序地读写;直接存取文件又称随即存取文件,其特点是:可以通过调用C语言的库函数去指定开始读写的字节号,然后直接对此位置上的数据进行读写操作。,16.2文件指针,文件指针,实际上是指向一个结构体类型的指针变量,这个结构体中包含有:缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标志等信息。所有一切都在stdio.h头文件中进行了定义,并称此结构体类型名为FILE,可以用此类型名来定义文件指针。定义文件指针的一般形式为:FILE*指针变量名,在标准头文件stdio.h中,同时预定义了三个非常有用的文件类型指针stdin、stdout、stderr。这三个标准文件类型指针通常都连到终端设备。stdin标准输入流指针,通常指键盘。stdout标准输出流指针,通常指显示器屏幕。stderr标准出错流指针,通常指显示器屏幕。为了对文件进行使用操作,需要把FILE指针作为一个参数传递给每个标准I/O函数。,16.3打开文件,1打开文件(fopen函数)打开一个文件调用标准I/O库函数fopen,它使打开文件与一个流相联,返回一个指向该流的文件类型指针,用于后续的文件操作。用法:FILE*fopen(constchar*filename,constchar*mode);(1)如打开成功,则fopen的返回一个文件类型指针,否则返回NULL。(2)参数filename指定打开的文件名。(3)参数mode指定文件打开方式,具体说明如下:,对文本文件的打开方式:r以只读方式打开。w以写方式打开,如果已存在该文件名的文件,文件被重写。a附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件用于写。r+打开一个已存在文件用于更新。w+创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。a+打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。,对二进制文件的打开方式:rb以只读方式打开。wb以写方式打开,如果已存在该文件名的文件,文件被重写。ab附加方式。打开用于在文件末尾写,当文件不存在时,创建新文件用于写。rb+打开一个已存在文件用于更新。wb+创建一个新文件用于更新,如果已存在该文件名的文件,文件被重写。ab+打开用于附加,当文件不存在时,创建新文件用于在文件末尾写。例如:打开一个文件,#includemain()FILE*fp;if(fp=fopen(jiaotong,r)=NULL)/*打开文件,并检查文件指针*/printf(canntopenthefile:jiaotong);exit(0);elseprintf(openthefile:jiaotong);fclose(fp);,该程序的作用是打开当前目录下的一个名叫:jiaotong的文件,如过存在该文件并被打开,则在屏幕上输出一行信息:openthefile:jiaotong.;否则输出:canntopenthefile:jiaotong.。虽然此处用只读方式(r)去打开文件,但并未做读取其中内容。,16.4关闭文件,对文件进行读写操作完成之后,应及时关闭该文件。关闭一个文件调用标准I/O库函数fclose,它清除与文件相关的流缓冲区。此后将不能再通过该指针,对原来与其联系在一起的文件进行操作;除非再次打开原文件,并让该指针重新指向它。函数fclose的用法:intfclose(FILE*stream);参数stream为文件流指针。如调用成功,则fclose的返回0,否则返回EOF(-1)。例如:关闭一个文件,#includemain()FILE*fp;if(fp=fopen(abc,r)=NULL)exit(0);if(0=fclose(fp)/*关闭文件,并检查返回值*/printf(closethefile:jiaotong);elseprintf(canntclosethefile:jiaotong);,运行该程该程序前,确认在当前目录下有一个名叫jiaotong的文件,程序先打开该文件,并立即关闭它,如果文件关闭成功,在屏幕上输出一行信息:closethefile:jiaotong.;否则输出:canntclosethefile:jiaotong。,16.5调用getc(fgetc)和putc(fputc)函数进行输入和输出,1输入字符函数fgetcfgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:字符变量=fgetc(文件指针);例如:ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。,例如:用fgetc从标准输入终端设备读取一个字符。#includemain()charch;printf(Enteracharacterfollowedby:);ch=fgetc(stdin);printf(Thecharacterreadis%cn,ch);,程序的运行情况如下:Enteracharacterfollowedby:b(输入字符“a”)Thecharacterreadisb(显示输入字符“a”)说明:该程序运行时,提示用户输入一个字符,用户从键盘上输入一个字符并回车,函数fgetc将从标准输入设备stdin读取一个字符。,2输出字符函数fputcfputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为:fputc(字符量,文件指针);其中,待写入的字符量可以是字符常量或变量,例如:fputc(a,fp);其意义是把字符a写入fp所指向的文件中。例如:用fputc向标准输出终端设备输出一个字符串。,#include#includemain()inti;charch=Hieverybody!;for(i=0;istrlen(ch);i+)fputc(chi,stdout);/*循环输出字符串中的每个字符*/说明:该程序运行时,向标准终端输出设备stdout(显示屏)输出字符串:“Hieverybody!”。,#include#includemain()inti;charch=“Helloeverybody!;for(i=0;istrlen(ch);i+)fputc(chi,stdout);/*循环输出字符串中的每个字符*/说明:该程序运行时,向标准终端输出设备stdout(显示屏)输出字符串:“Helloeverybody!”。,16.6判文件结束函数EOF读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),其格式如下:格式:intfeof(FILE*fp)功能:测试fp指向的文件是否到达文件尾。若到达文件尾,返回值为非0,否则返回值为0。,16.7fscanf函数和fprintf函数1格式读函数fscanf()格式:intfscanf(FILE*fp,constchar*format,address,)功能:根据format中的格式从fp指向的文件中读取数据存入到相应的address指向的变量中。2格式写函数fprintf()格式:intfprintf(FILE*fp,constchar*frmat,argument,)功能:根据格式字符串frmat把argument列表中的表达式值写到fp所指向的文件中。,16.8fgets函数和fputs函数1读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:fgets(字符数组名,n,文件指针);其中的n是一个正整数。表示从文件中读出的字符串不超过n1个字符。在读入的最后一个字符后加上串结束标志0。例如:fgets(str,n,fp);其意义是从fp所指的文件中读出n1个字符送入字符数组str中。,2写字符串函数fputsfputs函数的功能是向指定的文件写入一个字符串,其调用形式为:fputs(字符串,文件指针);其中字符串可以是字符串常量,也可以是字符数组名或指针变量,例如:fputs(abcd,fp);其意义是把字符串“abcd”写入fp所指的文件之中。,16.9fread函数和fwrite函数直接I/O又叫二进制I/O,用于整块数据的读写。可用来读写一组数据,如一个数组元素,一个结构变量的值等。1fread函数fread函数是从输入流中读取一个数据块。调用形式:intfread(void*ptr,intsize,intn,FILE*stream);,2fwrite函数fwrite函数用来输出一个数据块到指定流中。用法:intfwrite(constvoid*ptr,intsize,intn,FILE*stream);fwrite将n项长度为size字节数据复制到流中,终结空字符不拷贝。如果调用成功,则fputs返回0;出错时,则返回EOF。参数stream为文件流指针。,16.10文件定位函数实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。移动文件内部位置指针的函数主要有两个,即rewind函数和fseek函数。另外函数ftell用来得到文件指针的当前位置,用相对于文件头的字节位移量表示。,16.10.1freek函数格式:intfseek(FILE*fp,longoffset,intfrom)功能:移动文件位置指针到指定位置。说明:(1)fseek()把文件位置指针移动到与from所指定的文件位置距离offset个字节处,如果指针移动成功,则返回0,出错时返回非0。(2)参数offset为字节偏移量,为长整型数据,正数代表前进,负数代表后退。(3)参数form代表移动的开始位置。,16.10.2ftell函数格式:longftell(FILE*fp)。功能:得到fp指向的文件的文件位置指针位置。说明:ftell()在调用成功后返回当前指针位置,出错时返回1L。当打开一个文件时,通常并不知道该文件的长度,通过以下函数调用可以求出文件的字节数:fseek(fp,0L,SEEK_END);/*把位置指针移

温馨提示

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

评论

0/150

提交评论