C语言程序设计教程(第二版)_第1页
C语言程序设计教程(第二版)_第2页
C语言程序设计教程(第二版)_第3页
C语言程序设计教程(第二版)_第4页
C语言程序设计教程(第二版)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第12章 文件 C语言文件。 文件类型指针。 打开、关闭和检测文件 文件的输入和输出 文件的定位1 文件: 存储在外部介质上的、可由计算机识别的一组相关数据的集合。 C程序文件,是一个字符序列。 按文件中数据的组织形式(即代码存放形式)可分为两种文件: ASCII文本文件:采用ACSII代码存储方式,每个字符占一个字节,存储其对应的ASCII码. 二进制文件:采用C规定的内存数据的存储方式 系统将键盘、显示器处理为标准设备文件。 C系统对文件的处理采用缓冲文件系统12.1、C语言文件2 每个被使用的文件都在内存中开辟了一个区,用来存放该文件的信息。 文件的信息保存在一个名为FILE的结构体类型

2、的变量中。该结构体类型由系统定义 定义文件型指针变量:FILE * 指针变量名如: FILE * fp;fp:将指向某个文件的结构体变量C规定了三个标准设备文件指针,无需再定义。 stdin:标准输入文件(键盘) stdout:标准输出文件(显示器) stderr:标准错误输出文件(显示器)12.2、文件类型指针31、打开文件(fopen 函数)FILE *FP;fp=fopen(文件名,使用文件方式)使用文件的方式详见表12.1fopen函数是一个返回指针值的函数当返回值是NULL时,表示无法打开该文件常采用下列方式打开一个文件:if (fp=fopen(“file1”,”r”)=NULL)

3、 printf(”cant open this file n”) exit(0); /* 关闭文件函数 */ 2、关闭(fclose函数)fclose(文件指针)12.3 打开、关闭和检测文件43、检测文件 功能:检测“文件指针”所指向文件中的位置指针是否处于文件结束位置,如果feof()函数返回值为0,表示文件未结束(即文件的位置指针没有指到文件末尾)。如果返回一个非零值,表示文件结束(即文件的位置指针已经指到文件末尾)。12.3 打开、关闭和检测文件(1) 检测文件是否结束函数(feof()函数) feof(文件指针);53、检测文件(2)检测错误函数(ferror()函数) ferror

4、(文件指针);12.3 打开、关闭和检测文件 功能:检测对文件指针所指向的文件在用各种输入、输出函数进行读写时是否发生了错误,如果ferror()函数返回值为0,表示未出错;如果返回一个非零值,表示出错。在执行fopen()函数时,ferror()函数的初始值自动置为0。63、检测文件(3)清除错误标志和文件结束标志函数(clearerr()函数) clearerr(文件指针) ;12.3 打开、关闭和检测文件 功能:用于清除文件指针所指向的文件的出错标志和文件结束标志,使它们的值为0。假设在调用一个输入函数时出现错误,这时ferror()函数值为一个非零值,在调用clearerr()函数后,

5、ferror()函数值变为0值。712.4.1、fputc,fgetc函数(1)fputc函数:把一个字符写到文件中fputc(ch,fp)ch:为待输出的字符fputc函数的返回值:当输出成功时为ch的值 当输出不成功时为EOF即 -1。(2)fget函数:从指定文件中读入一个字符ch=fgetc(fp);12.4、文件的输入和输出8如: 顺序读入磁盘文件中的字符并输出对于文本文件:ch=fgetc(fp);while(ch!=EOF) putchar(ch); ch=fgetc(fp); 对于二进制文件:while(!feof() ch=fgetc(fp); putchar(ch); 9例

6、如12.1 编写程序,从键盘输入一个以“$”结尾的字符串,并将它们原样存到名为文件中。 #includestdio.hmain( ) FILE *fout; /*定义文件指针*/ char ch; if(fout=fopen(“”,w)=NULL)/*为写打开文件*/ printf(can not open filen); exit(0); ch=getchar(); while(ch!=$) fputc(ch,fout);/*将字符变量ch的值输出到文件中*/putchar(ch); /* 将字符变量ch的值输出到屏幕*/ ch=getchar( ); fclose(fout);/* 关闭文

7、件*/ 10例如12.2编写程序读入【例12.1】生成的文本文件,并将文件内容原样输出到显示屏上。#include stdio.hmain( ) FILE *fin;/*定义文件指针*/ char ch; if(fin=fopen(“”,r)=NULL) /*为读打开文件*/ printf(can not open infilen); exit(0); while(!feof(fin) /*当没有到文件末尾时执行循环*/ ch=fgetc(fin); /*从文件中读一个字符*/ putchar(ch); /* 将字符变量ch的值输出到屏幕*/ fc1ose(fin);/* 关闭文件*/1112

8、.4.2、fputs,fgets函数:读写一个字符串(1)fputs函数fputs(str,fp) str:为指向字符串的指针或字符数组 功能: 该函数将str所指向的字符串活字符串常量输出到指定的文件中,但不包括字符串结束符当操作成功时,函数的返回值为0,否则为一个非0值(tc中)(2)fgets函数fgets(str,n,fp); 功能: 从指定的文件中读入n个字符,存放到str中,并加0,函数的返回值为str的地址12【例12.3】将从键盘上输入的若干行字符输出到磁盘文件中。#include stdio.h#include string.hmain( ) FILE *fp; char s

9、tr80; if(fp=fopen(lx.txt, w)=NULL) printf(File can not openedn); exit(0); while(strlen(gets(str)0) /* 从键盘读入的字符串长度大于0时,执行循环*/ fputs(str,fp); /*将字符串写入文件*/ fputs(n,fp);/*将换行符写入文件*/ fclose(fp); 1312.4.3、fprintf、fscanf函数:读写一组数据fscanf(文件指针,格式字符串,输入表列);fprintf(文件指针,格式字符串,输出表列);如: int a3; fscanf(fin,”%d%d%d

10、”,&a0,&a1,&a2); fwrite(fout,”%d,%d,%d”,a0,a1,a2);14例如12.4 编写程序从键盘输入3个学生的学号、姓名和成绩,并将它们存放到磁盘文件stud.txt中。 #include stdio.h#define SIZE 3main( ) int i,num; char name10; float score; FILE *fout; if(fout=fopen(stud.txt,w)=NULL) printf(can not open filen); exit(0); for(i=0;iSIZE;i+) scanf(%d%s%f,&num,name,

11、&score); fprintf(fout, %d %s %f ,num,name,score); fclose(fout);1512.4.4、fread、fwrite函数:读写一组数据fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中:buffer:读入或输出数据的指针size :字节数count :大小为size个字节的数据项数fp :文件指针函数返回count的值如: int a3; fread(a,sizeof(int),3,fin); fwrite(a,sizeof(int),3,fout);16例如12.5 用fr

12、ead()函数和fwrite()函数修改【例12.4】。#include stdio.h#define SIZE 3struct student int num; char name10; int score; stdSIZE;main( ) int i; FILE *fout; if(fout=fopen(stud.bxt,wb))=NULL) printf(can not open filen); exit(0); for(i=0;iSIZE;i+ scanf(%d%s%d,&stdi.num,,&stdi.score); fwrite(&stdi,sizeof(stru

13、ct student),1,fout); fclose(fout);1712.5.1 rewind()函数 rewind(文件指针); 功能:将文件的位置指针置于文件的开头。此函数没有返回值。 12.5.2 fseek()函数和随机读写 fseek(文件类型指针,位移量,起始点)。 功能:移动文件的位置指针到指定的位置上,随后的读写操作将从此位置开始。利用fseek()函数可以实现文件的随机读写。12.5 文件的定位18【例12.6】 在磁盘文件(ss.bxt)上存有10个实型数据。编写程序将第1、3、5、7、9个数据输入到计算机,并在屏幕上显示出来。#include stdio.hmain( ) int i;float d10; FILE *fp; if(fp=fopen(“ss.bxt”,rb)=NULL) printf(cannot open filen); exit(0); for(i=0;i10;i+=2) fread(&di,4,1,fp); printf(%8.2fn, di);

温馨提示

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

评论

0/150

提交评论