C语言第八次作业答案.ppt

上传人:牧羊曲112 文档编号:6504293 上传时间:2023-11-07 格式:PPT 页数:35 大小:207KB
返回 下载 相关 举报
C语言第八次作业答案.ppt_第1页
第1页 / 共35页
C语言第八次作业答案.ppt_第2页
第2页 / 共35页
C语言第八次作业答案.ppt_第3页
第3页 / 共35页
C语言第八次作业答案.ppt_第4页
第4页 / 共35页
C语言第八次作业答案.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C语言第八次作业答案.ppt》由会员分享,可在线阅读,更多相关《C语言第八次作业答案.ppt(35页珍藏版)》请在三一办公上搜索。

1、第九章 文件,9.1 文件概述9.2 文件的打开和关闭9.3 文本文件的输入和输出9.4 二进制文件的输入和输出9.5 其他文件库函数定位函数出错监测函数,9.1 文件概述,文件是存储在外部介质上的数据的集合,由操作系统来管理。最常用的是磁盘(硬盘、U盘、光盘等)文件。从文件数据的组织形式看文件可分为文本文件和二进制文件。源程序文件一般是文本文件。数据文件可是文本文件,也可是二进制文件。C语言把文件都看作“字节流”文件,也称“流式文 件”,对文件的读写是以字节为单位的。,C语言中的文本文件的每个字节代表一个字符,存放的是该字符的ASCII码。C语言中的二进制文件是把数据按其在内存中的存储形式照

2、原样输出到磁盘上。C语言中对文件处理的方法可分为两种:缓冲文件系统 系统自动为打开的文件开辟其各自的内存缓冲区,本章介绍的文本文件和二进制文件都属此种。非缓冲文件系统 系统不自动开辟内存缓冲区,而由用户根据需要在程序中设定。,9.2 文件的打开和关闭,文件类型(FILE)指针fopen函数fclose函数,文件类型(FILE)指针,FILE类型 处理一个文件应知它的各种信息,这些信息由系统将其构成一个结构体类型,取名 FILE,谓之文件类型,其定义放在stdio.h头文件中。typedef struct short level;/*fill/empty level of buffer*/uns

3、igned flags;/*File status flags*/char fd;/*File descriptor*/unsigned char hold;/*Ungetc char if no buffer*/short bsize;/*Buffer size*/unsigned char*buffer;/*Data transfer buffer*/unsigned char*curp;/*Current active pointer*/unsigned istemp;/*Temporary file indicator*/short token;/*Used for validity

4、checking*/FILE;,FILE类型指针包含了stdio.h头文件就可用FILE来定义文件类 型的指针变量。如:FILE*fp;可以使fp指向某一文件的结构体变量,从而可通过读取该结构体变量中的各项信息来实现对该文件的操作。一个文件指针用来操作一个文件。如有n个文件,一般应定义n个文件类型指针变量来分别指向n个文件。,fopen-文件打开函数,原型:FILE*fopen(char*filename,char*mode);调用时:filename(文件名)为要打开文件的文件名(字符串),可写成:test.dat 或定义过 char s=test.dat;则写 s;或定义过 char*pc

5、=test.dat;则写 pc;或定义过#define ff test.dat;则写 ff。,mode 为文件使用方式或称打开方式,可以是:r 只读,为输入打开一个文本文件;w 只写,为输出打开一个文本文件;a 追加,向文本文件尾追加数据;rb 只读,为输入打开一个二进制文件;wb 只写,为输出打开一个二进制文件;ab 追加,向二进制文件尾追加数据;r+读写,为读/写打开一个文本文件;w+读写,为读/写建立一个新文本文件;a+读写,为读/写(追加)打开一个文本文件;“rb+”读写,为读/写打开一个二进制文件;wb+读写,为读/写打开一个二进制文件;ab+读写,向读/写二进制文件尾追加数据;,打

6、开文件常用如下语句:if(fp=fopen(file1.dat,r)=NULL)printf(cannot open this file.n);exit();如果调用fopen()成功,返回一文件类型指针,否则返回一空指针。其中exit()是个进程控制库函数,其作用是关闭所有文件,终止程序运行。格式为:void exit(int status),fclose-文件关闭函数,原型:int fclose(FILE*fp)如果文件关闭成功,返回0,如检测到任何错误,则返回EOF(即-1,在头文件stdio.h中定义)任何已经打开的文件在文件使用结束后,应用fclose 函数及时关闭。程序结束时,程序

7、中打开的所有文件会被自动关闭。,9.3 文本文件的输入输出,读写一个字符的函数fgetc()和fputc()字符串读写函数-fgets()和fputs()格式化读写函数-fscanf()和fprintf(),1 读写字符函数,1)读字符函数-fgetc()格式:int fgetc(FILE*fp)功能:从一打开的文件中读一个字符,返回该字 符。文件中有一个指向当前位置的指针自动后移 一个字符。反复调用可一直读到文件结束。文件 结束或出错时,返回EOF。C语言还提供了一个检测文件结束函数:int feof(FILE*fp)如果文件结束,返回非0值,否则返回0。,【例9.1】设计程序读一个源程序文

8、件,并在屏幕上显示。源程序文件名为:“e:hello.c”。#include stdio.hmain()FILE*fp;char ch;if(fp=fopen(“e:hello.c,r)=NULL)printf(cannot open this file.n);exit();ch=fgetc(fp);while(feof(fp)=0)putchar(ch);ch=fgetc(fp);fclose(fp);,其中:ch=fgetc(fp);while(feof(fp)=0)putchar(ch);ch=fgetc(fp);也可写成:while(!feof(fp)ch=fgetc(fp);putc

9、har(ch);或:while(ch=fgetc(fp)!=EOF)putchar(ch);,写字符函数fputc()格式:int fputc(char ch,FILE*fp)功能:将字符 ch 写到fp指向的文件中去,成功,则返回该字符,否则返回EOF。【例9.3】将字符串“Welcome Freshman!”写入e:下名为“file1.txt”的磁盘文件中。,#include stdio.hmain()FILE*fp;char ch;if(fp=fopen(“E:file1.txt,w)=NULL)printf(cannot open this file.n);exit();while(c

10、h=getchar()!=n)fputc(ch,fp);fclose(fp);运行时输入:Welcome Freshman,2 读写字符串函数,1)读字符串函数-fgets()格式:char*fgets(char*buf,int max,FILE*fp);功能:从fp指定的文件读取长度为max-1的字符串存入起始地址为buf的内存空间,自动加结束标志0,共占n个字符,返回值为地址buf。若在未读足max-1个字符前遇到换行符n或文件结束就停止读取。若读到文件末尾或出错,则返回NULL值,2)写字符串函数-fputs()格式:int fputs(char*buf,FILE*fp);其中buf可以

11、是字符串常量,字符数组名或字符指针。功能:将buf指向的字符串写到fp指定的文件。但不输出字符串结束符。写成功,则返回所写的最后一个字符,否则返回EOF值。,例:(填空):从键盘上输入一个字符串,把其中的小写字母改成大写,输出到文件test.txt中,然后从该文件读出此字符串并显示。#include main()FILE*fp;char str100;int i=0;gets(str);if(fp=fopen(test.txt,_)=NULL)printf(Cant open this file.n);exit(0);while(stri)if(stri=a,w,stri-32,r,【例9.5

12、】将字符串They decided to meet the following evening.加密后写入磁盘文件,该文件名为file3.txt。加密算法是将信息字符串每个字符和密钥字符串,唐诗“床前明月光,疑是地上霜,举头望明月”的汉语拼音码相加。解密的方法当然是二者相减。这可从磁盘文件中把密码读到内存后解密验证。,#include main()FILE*fp;int len,i;char s80=They decided to meet the following evening.,char r80=ChuangqianmingyueguangYishidishangshuangJjuto

13、uwang,a80;len=strlen(s);for(i=0;ilen;i+)ai=si+ri;/*加密运算*/ai=0;puts(a);/*显示密码*/fp=fopen(file3.txt,w);fputs(a,fp);/*写入文件*/fclose(fp);fp=fopen(file3.txt,r);fgets(a,len+1,fp);/*读文件*/for(i=0;ilen;i+)ai=ai-ri;/*解密运算*/puts(a);/*显示原信息*/,3 格式化读写函数,调用格式:fscanf(FILE*fp,格式说明,输入表列);fprintf(FILE*fp,格式说明,输出表列);这两个

14、函数与scanf()和printf()相似,只是读写对象不同,前者是文件,后者是终端。,【例9.6】编程序构成一个九九表,写入文件file4.txt。再从该文件把九九表中的数据读入二维数组a99#include main()FILE*fp;int i,j,a99;fp=fopen(file4.txt,w);for(i=1;i10;i+)for(j=1;j10;j+)fprintf(fp,%3d,i*j);fprintf(fp,n);fclose(fp);,fp=fopen(file4.txt,r);for(i=0;i9;i+)for(j=0;j9;j+)fscanf(fp,%d,总结1:辅助函

15、数,FILE*fp;打开文件 fp=fopen(“文件名”,“打开方式”);关闭文件 fclose(fp);判断文件是否结束 feof(fp);/*文件结束返回值为1,否则为0*/EOF/*文件结束标志*/,总结2:读写函数一览,char c,s80;int max;FILE*fp,*fp1;/*从fp指向的文件读1个字符赋给字符c*/c=fgetc(fp);/*将字符c写到fp指向的文件中*/fputc(c,fp);/*从fp指向的文件读max-1个字符写到字符串s中*/fgets(s,max,fp);/*将字符串s的内容写到fp指向的文件中*/fputs(s,fp);/*从fp指向的文件中

16、按格式读内容到 变量地址表*/fscanf(fp,格式控制符,变量地址表);/*将变量表的内容按格式控制符的格式写到fp指向的文件中*/fprintf(fp,格式控制符,变量表);,char c,s80;int max;FILE*fp;,操作对象不同的两种函数的对比,9.4 二进制文件的输入输出,格式:int fread(void*buf,int size,int n,FILE*fp);int fwrite(void*buf,int size,int n,FILE*fp);其中:void*buf:任何类型指向数据块(首址)的指针,int size:要读写的数据块字节数,int n:要读写的数据

17、块个数,FILE*fp:指向已打开的要读写文件的指针。读或写成功,返回读或写数据块个数,例(填空):以下程序把从键盘读入的10个整数 以二进制方式写到一个名为bin.dat的新文件中。#include FILE*fp;main()int i,j;if(fp=fopen(_,wb)=NULL)exit(0);for(i=0;i10;i+)scanf(%d,bin.dat,sizeof(int),fp,【例9.9】设职工数据为:工号、姓名、性别、年龄、工资,将6名职工的数据从键盘输入,然后送入磁盘文件worker1.rec中保存。再读此文件并输出这些数据,依次打印出来。,说明:其实前叙四对对文件的

18、操作函数既可以用于操作文本文件,也可用于操作二进制文件,但fgetc/fputc、fputs/fputs、fscanf/fprintf三对函数更常用于操作文本文件,而fread/fwrite函数更常用于操作二进制文件,这是一种主流用法、直观而方便。,*9.5 其他文件操作函数,1)文件的定位函数 每个文件打开进行读、写操作时,有一个文件指针表明当前文件的读写位置,该指针在读写过程中是自动移动的 C语言库中提供了文件定位函数可对文件的指针进行人工操纵。rewind(FILE*fp);作用是使当前位置指针重新返回文件的开头,程序可对文件重新作读写操作.,fseek()函数 fseek(FILE*f

19、p,位移量,起始点);其中“起始点”指位置移动的基准点,它可以是文件的开始,也可以是文件的当前位置,也可是文件的末尾。“位移量”指以“起始点”为基准前后移动的字节数,可选:SEEK_SET 或 0 偏移量的起始点为文件开始SEEK_CUR 或 1 偏移量的起始点为当前位置SEEK_END 或 2 偏移量的起始点为文件结尾,下面是fseek()调用的一些例子,fp是指向文件的指针。fseek(fp,0L,SEEK_SET);/*找到文件开始处*/fseek(fp,20L,SEEK_SET);/*找到文件的第20个字节*/fseek(fp,2L,SEEK_CUR);/*从文件的当前位置向尾部移动2

20、个字节*/fseek(fp,0L,SEEK_END);/*找到文件的尾部*/fseek(fp,-10L,SEEK_END);/*从文件的结尾处退回10个字节*/,2)出错监测函数ftell(FILE*fp)函数 该函数的作用是检测文件的当前位置,其返回值是相对于文件开头的位移量,用长整型表示,文件第一个字节的位移量为0,其余类推。当返回值是-1L时,表示出错。ferror(FILE*fp)函数 监视读写函数是否发生错误,若没有错误,返回0;若发生错误,返回非0。clearerr(FILE*fp)函数 当读写发生错误,ferror()函数返回非0值,需要的话可以调用clearerr()函数,使ferror()的值复0。,上机实验 9,1 有一封英文信,其文件名为:letter.txt。统计信中大写字母的个数,句子的总数(91.c)2.编写程序,将文件e:test2.txt中每一行字符逆序显示在屏幕上。(设每一行不超过80字符),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号