资源目录
压缩包内文档预览:
编号:21836451
类型:共享资源
大小:13.43MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学
语言程序设计
任正云
课件
ppt
- 资源描述:
-
大学C语言程序设计-任正云-课件PPT,大学,语言程序设计,任正云,课件,ppt
- 内容简介:
-
第十章 文件10.1 C文件概述文件:存储在外部介质上数据的集合,是操作系统数据管理的单位使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据文件分类按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:文本文件: ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放10.1.2 文件的访问方式 1、 文件操作过程 文件操作需要包括以下几个过程: 文件指针定义 文件打开。 文件处理,执行以下两种操作中的一种; 读文件 写文件 文件关闭。10.1.2 文件的访问方式 2、文件结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中typedef struct short level; /缓冲区满或空的程度 unsigned flags; /文件状态标志 char fd; /文件描述符 short bsize; /缓冲区大小 unsigned char *curp; /指针,当前的指向 unsigned char *buff; /数据缓冲区位置 unsigned istemp; /临时文件,指示器 short token; /用于有效性检查FILE;文件类型指针指针变量说明: FILE *fp;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放10.2 格式化数据文件操作C文件操作用库函数实现,包含在stdio.h文件使用方式:打开文件-文件读/写-关闭文件系统自动打开和关闭三个标准文件:标准输入-键盘 stdin标准输出-显示器 stdout标准出错输出-显示器 stderr打开文件fopen函数原型: FILE *fopen(char *name,char *mode)功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL要打开的文件名使用文件方式例 文件打开与测试 FILE *fp; fp=fopen(aa.c, w); if(fp=NULL) printf(File open error!n); exit(0); 例 FILE *fp; fp= fopen (“c:zhoutest.dat”,”r”); 例 FILE *fp; char *filename=c:zhoutest.dat fp= fopen(filename, r); 文件关闭fclose作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:int fclose(FILE *fp)功能:关闭fp指向的文件返值:正常关闭为0;出错时,非0文件打开时返回的文件类型指针格式化I/O:fprintf与fscanf函数原型:fprintf(文件指针,格式字符串,输出表列)fscanf(文件指针,格式字符串,输出表列)功能:按格式对文件进行I/O操作返值:成功,返回I/O的个数;出错或文件尾,返回EOF例 fprintf(fp,“%d,%6.2f”,i,t); /将i和t按%d,%6.2f格式输出到 fp文件 fscanf(fp,“%d,%f”,&i,&t); /若文件中有3,4.5 ,则将3送入i, 4.5送入t-文件建立【例10.1】键盘输入5位同学的3门课成绩,保存数据文件cj.dat中。# include stdio.h main() FILE*fp; /*定义文件指针*/ float sc1,sc2,sc3;int i; if(fp=fopen(cj.dat , w )NULL) printf( nCan not open file cj.dat.n );exit(1); for(i=0;i5;i+) printf( please input No.%d there scores: ,i+1); scanf( %d,%d,%d,&sc1,&sc2,&sc3); fprintf(fp, %d,%d,%dn,sc1,sc2,sc3); fclose(fp); -文件访问【例102】显示【例10。1】所产生的数据文件cj.dat的内容,并计算各门课程的平均分。include stdio.hmain() FILEfp; /*定义文件指针*/ float sc1,sc2,sc3,sum1=0,sum2=0,sum3=0; int i; if(fp=fopen(cj.dat , r )=NULL) printf( nCan not open file cj.dat.n ); exit(1); for(i=0;i5;i+) fscanf(fp, %d,%d,%d ,&sc1,&sc2,&sc3); sum1=sum1+sc1; sum2=sum2+sc2; sum3=sum3+sc3; printf( The scores are:%d,%d,%d ,sc1,sc2,sc3);fclose(fp);printf( The scoresaverage are:%d,%d,%dn ,sum/51,sum2/5,sum3/5);-文件修改 【例103】追加一条记录到【例10.1】建立的数据文件cj.dat中。include stdio.h main()FILE *fp;float sc1,sc2,sc3;if(fp=fopen( cj.dat , a )NULL) printf( nCan not open file cj.dat.n );exit(1);printf( Please input third students three scores: );scanf( %d,%d,%d ,&sc1,&sc2,&sc3);fprintf(fp, %d,%d,%dn ,sc1,sc2,sc3);fclose(fp); 文件修改# include stdio.h main() FILE*rfp,*wfp; /*定义文件指针*/ float sc1,sc2,sc3; int i; rfp=fopen( cj.dat , r); wfp=fopen( cj1.dat , w ); for(i=0;i3;i+) fscanf(wfp, %d,%d,%d ,&sc1,&sc2,&sc3); fprintf(wfp, %d,%d,%dn ,sc1,sc2,scc3); printf( please input third students three scores: ); scanf( %d,%d,%d ,&sc1,&sc2,&sc3);fprintf(wfp, %d,%d,%dn ,sc1,sc2,sc3); 【例104】在【例10.1】中建立的数据文件中第三个同学的成绩后面插入一条记录。for(i=0;i2;i+) fscanf(rfp, %d,%d,%d , &sc1,&sc2,&sc3); fopen(wfp, %d,%d,%dn , sc1,sc2,sc3); fclose(rfp); fclose(wfp);-字符串I/O:fputs与fgets-fgets常用的调用形式: FILE *fp; fgets( str, n, fp ); str:字符指针,可以是字符数组名或字符指针变量; n:读取字符个数(n-1)。 fp:文件指针变量。函数功能: 从fp所指向的文件中,读取n-1个字符后,加上字符串结束标志0组成一个字符串,存入字符数组中。 若输入操作成功,返回字符数组的首地址; 若文件结束或输入操作失败,则返回NULL。10.3 字符数据文件操作【例10.5】 顺序显示磁盘的一个ASCII码文件,显示的文件名命令行上输入,就像DOS下的TYPE命令一样。 # include stdio.h void main(int argc,char *argv )FILE *fp; char ch; if(argc!=2)printf( n the number of arguments not correct. );printf( n usage:disp sourcefile );exit (0);if(fp=fopen(argv1, r )=NULL)printf( n can not open source file.n );exit(1); while(ch=fget(fp)!=EOF) /*顺序;输出文件的内容*/putchar(ch); /*顺序读入并显示*/fclose(fp); / *关闭打开的文件*/-字符串I/O:fputs与fgets-fputs常用的调用形式: FILE *fp; fputs( str, fp ); str:需要输出的字符串,可以是字符串常量或字 符串指针; fp:文件指针变量。函数功能: 将字符串(不包括字符串结束标志0)写到文件指针fp所指向的文件中。 若输出操作成功,返回非0值; 若输出操作失败,则返回0。10.3 字符数据文件操作【例106】将键盘上输入一个字符串( 以“”作为结束字符),以ASCII码形式存储到一个磁盘文件中。此程序作用类似于DOS下的copy cofilename命令。# include”stdio.h”void main(int arge,char*argv)FILE *P;char ch;if ( ( fp=fopen ( argv1 , w ) )= =NULL) /*打开文件失败*/ printf( nCan not open thei file. );exit(1);for(; ( char=getchar( ) ) !=;) /*输入字符,并存储到指定文件中*/ fputc(ch,fp); /*输入字符并存储到文件中*/fclose(fp); /*关闭文件*/【例10.7】从键盘输入一个字符串,保存到文本文件“text.txt”中,再将此文件内容显示出来。# include stdio.h void main(void) FILE *fp; char str81; printf(nPlease input a string (string length81 ):); gets(str); fopen(text.txt,w); fclose(fp); fp=fopen(text.txt,r); fgets(str,81,fp); printf(nThe strng in file is:); puts(str); fclose(fp);-feof()函数文件结束测试函数常用的调用形式: FILE *fp; feof(fp); fp:文件指针变量。函数功能: 测试fp所指向的文件是否已读到文件尾部。 若该文件没有结束,则返回0; 若文件结束,则返回非0值。 【例10.5】中的代码:while(ch=fgetc(fp)!=EOF) putchar(ch);可以更改为:while(!feof(fp) )ch=fgetc( fp );putchar(ch);10.4 fread( )与fwrite( )函数函数原型: fread(buffer, size, count, fp) fwrite(buffer, size, count, fp)功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:buffer: 指向要输入/输出数据块的首地址的指针size: 每个要读/写的数据块的大小(字节数)count: 要读/写的数据块的个数fp: 要读/写的文件指针fread与fwrite 一般用于二进制文件的输入/输出 【例10.8】从键盘上按顺序输入4个学生的数据,包括学号、姓名、成绩。要求完成:(1)将4个学生的数据写入二进制文件“mydat.dat”中;(2)显示文件“mydat.dat”中的数据。# include stdio.h struct stud long xh; char name10; float score;main( ) struct stud stu1; int i; FILE *fp; fp=fopen( mydat.dat , web ); for (i=1;i=4;i+) printf( nPlease input No,%d student info: ,i); scanf( %ld,%s,%f ,&stu1.xh,&, &stu1.score); fwrite(&stu1,sizeof(struct stud),1,fp);fclose(fp);fp=fopen(“mydat.dat”,”rb”);printf( n number name scoren );for(i=1;i0 向后移动0 向前移动起始点文件开始 SEEK_SET 0文件当前位置 SEEK_CUR 1文件末尾 SEEK_END 2例 fseek(fp,100L,0); /将位置指针移到离文件头100个字节处 fseek(fp,50L,1); /将位置指针移到离当前位置50个字节处 fseek(fp,-10L,2); /将位置指针从文件末尾处向后退10个字节ftell函数函数原型: ftell(文件类型指针)功能:返回fp指向的文件中的读写指针当前位置,即相对于文件开始处的位移量,单位是字节。 若调用成功,则返回文件读写指针当前值(长整型); 若调用失败,则返回-1L。 【例 10.10】由键盘输入一些数据(遇到星号时结束),并以二进制形式保护存到磁盘文件mybin.dat 中。再从此文件中随机读出数据并显示。# include stido.h main()FILE*fp; char ch; long curpos; if (fp=fopen(“mybin.dat”,”wb”)=NULL)printf (“n 不能建立新文件!”);exit (1);while (ch=getchar ()!= * ) putc (ch,fp);fclose (fp);if (fp=fopen( mybin.dat , rb )=NULL)printf (n 不能打开文件!);exit (1);fseek(fp,01,SEEK_END); printf( n 文件大小为:%ld 字节。,ftell(fp);rewind(fp);printf(fp);printf(“ n目前的文件读写位置指针指向第%ld字节。n ,ftelll(fp); while(ch=getc(fp),!feof(fp) putc(ch,stdout);curpos=4l; fseek(fp,curpos,SEEK-SET);printf(“ n目前的文件读写
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。