C语言第八次作业答案.ppt_第1页
C语言第八次作业答案.ppt_第2页
C语言第八次作业答案.ppt_第3页
C语言第八次作业答案.ppt_第4页
C语言第八次作业答案.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第九章 文件,9.1 文件概述 9.2 文件的打开和关闭 9.3 文本文件的输入和输出 9.4 二进制文件的输入和输出 9.5 其他文件库函数 定位函数 出错监测函数,9.1 文件概述,文件是存储在外部介质上的数据的集合,由操作系统来管理。最常用的是磁盘(硬盘、U盘、光盘等)文件。 从文件数据的组织形式看文件可分为文本文件和二进制文件。 源程序文件一般是文本文件。 数据文件可是文本文件, 也可是二进制文件。 C语言把文件都看作“字节流”文件,也称“流式文 件”,对文件的读写是以字节为单位的。, C语言中的文本文件的每个字节代表一个字符,存放的是该字符的ASCII码。 C语言中的二进制文件是把数据按其在内存中的存储形式照原样输出到磁盘上。 C语言中对文件处理的方法可分为两种: 缓冲文件系统 系统自动为打开的文件开辟其各自的内存缓冲区,本章介绍的文本文件和二进制文件都属此种。 非缓冲文件系统 系统不自动开辟内存缓冲区,而由用户根据需要在程序中设定。,9.2 文件的打开和关闭,文件类型(FILE)指针 fopen函数 fclose函数,文件类型(FILE)指针,FILE类型 处理一个文件应知它的各种信息,这些信息由系统将其构成一个结构体类型,取名 FILE,谓之文件类型,其定义放在stdio.h头文件中。 typedef struct short level; /* fill/empty level of buffer */ unsigned 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 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 =“test.dat“; 则写 pc ; 或定义过 #define ff “test.dat“; 则写 ff 。, mode 为文件使用方式或称打开方式,可以是: “r“ 只读,为输入打开一个文本文件; “w“ 只写,为输出打开一个文本文件; “a“ 追加,向文本文件尾追加数据; “rb“ 只读,为输入打开一个二进制文件; “ wb“ 只写,为输出打开一个二进制文件; “ ab“ 追加,向二进制文件尾追加数据; “ r+“ 读写,为读/写打开一个文本文件; “ w+ “ 读写,为读/写建立一个新文本文件; “ a+ “ 读写,为读/写(追加)打开一个文本文件; “rb+” 读写,为读/写打开一个二进制文件; “wb+“ 读写,为读/写打开一个二进制文件; “ab+“ 读写,向读/写二进制文件尾追加数据;, 打开文件常用如下语句: 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 函数及时关闭。 程序结束时,程序中打开的所有文件会被自动关闭。,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】设计程序读一个源程序文件,并在屏幕上显示。源程序文件名为:“e:hello.c”。 # include “stdio.h“ main( ) 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); putchar(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.h“ main( ) FILE *fp; char ch; if(fp=fopen(“E:file1.txt“,“w“)=NULL) printf(“cannot open this file.n“); exit( ); while(ch=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可以是字符串常量,字符数组名或字符指针。 功能:将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】 将字符串“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=“ChuangqianmingyueguangYishidishangshuangJjutouwang“, 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, 格式说明,输出表列); 这两个函数与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:辅助函数,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指向的文件中按格式读内容到 变量地址表*/ 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: 要读写的数据块个数, 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中保存。再读此文件并输出这些数据,依次打印出来。,说明:其实前叙四对对文件的操作函数既可以用于操作文本文件,也可用于操作二进制文件,但fgetc/fputc、fputs/fputs、fscanf/fprintf三对函数更常用于操作文本文件,而fread/fwrite函数更常用于操作二进制文件,这是一种主流用法、直观而方便。,*9.5 其他文件操作函数,1)文件的定位函数 每个文件打开进行读、写操作时,有一个文件指针表明当前文件的读写位置,该指针在读写过程中是自动移动的 C语言库中提供了文件定位函数可对文件的指针进行人工操纵。 rewind(FILE* fp); 作用是使当前位置指针重新返回文件的开头,程序可对文件重新作读写操作 .,fseek()函数 fseek(FILE* fp,位移量,起始点); 其中“起始点”指位置移动的基准点,它可以是文件的开始,也可以是文件的当前位置,也可是文件的末尾。 “位移量”指以“起始点”为基准前后移动的字节数,可选: SEEK

温馨提示

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

评论

0/150

提交评论