《C/C++程序设计教程》电子教案 C语言程序设计8

上传人:E**** 文档编号:89399438 上传时间:2019-05-24 格式:PPT 页数:25 大小:213.50KB
返回 下载 相关 举报
《C/C++程序设计教程》电子教案 C语言程序设计8_第1页
第1页 / 共25页
《C/C++程序设计教程》电子教案 C语言程序设计8_第2页
第2页 / 共25页
《C/C++程序设计教程》电子教案 C语言程序设计8_第3页
第3页 / 共25页
《C/C++程序设计教程》电子教案 C语言程序设计8_第4页
第4页 / 共25页
《C/C++程序设计教程》电子教案 C语言程序设计8_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《《C/C++程序设计教程》电子教案 C语言程序设计8》由会员分享,可在线阅读,更多相关《《C/C++程序设计教程》电子教案 C语言程序设计8(25页珍藏版)》请在金锄头文库上搜索。

1、第八章 文 件,2019/5/24,C与C+程序设计教程-第八章,2,8.1 C语言文件概述 8.2 缓冲文件输入输出系统 8.3 非缓冲文件输入输出系统,退出,2019/5/24,C与C+程序设计教程-第八章,3,8.1 C语言文件概述,文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。,文件分类: 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长)。 流式文件:由一个个字符(字节)数据顺序组成。 按存储介质: 普通文件:存储介质文件(磁盘、磁带等)。 设备文件:非存储介质(键盘、显示器、打印机等)。 按数据的组织形式: ASCII文件(文本文件):每个字节存放

2、ASCII码,表示一个字符。 二进制文件:数据按其在内存中的存储形式原样存放。,2019/5/24,C与C+程序设计教程-第八章,4,文本文件特点: 存储量大,转换为二进制速度慢,直观易记。,二进制文件特点: 存储量小,无需转换。 但因一个字节不对应一个字符,故不能直接输出其字符形式。,2019/5/24,C与C+程序设计教程-第八章,5,文件系统 缓冲文件系统(高级文件系统):系统自动为正在使用的文件开辟内存缓冲区。 非缓冲文件系统(低级文件系统):由用户在程序中为每个文件设定缓冲区。,返 回,2019/5/24,C与C+程序设计教程-第八章,6,8.2.1 文件类型结构及文件指针 8.2.

3、2 文件的打开与关闭 8.2.3 文件的读写 8.2.4 文件的定位 8.2.5 出错的检测,8.2 缓冲型文件输入输出系统,缓冲型文件输入输出系统(高级磁盘输入输出系统/高级I/O) :用缓冲文件系统进行的输入输出。,返 回,2019/5/24,C与C+程序设计教程-第八章,7,8.2.1 文件类型结构及文件指针 文件类型结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区。 文件信息用系统定义的名为FILE的结构体描述。 FILE定义在stdio.h中。,typedef struct /* Turbo C 文件类型声明 */ short level; /* 缓冲区满/空程度

4、*/ unsigned flags; /* 文件状态标志 */ char fd; /* 文件描述符 */ unsigned char hold; /* 若无缓冲区不读取字符 */ short bsize; /* 缓冲区大小 */ unsigned char *buffer; /* 数据传送缓冲区位置 */ unsigned char *curp; /* 当前读写位置 */ unsigned istemp; /* 临时文件指示 */ short token; /* 用作无效检测 */ FILE ; /* 结构体类型名 FILE */,2019/5/24,C与C+程序设计教程-第八章,8,文件指针

5、定义形式 FILE *文件结构指针名; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件。 文件关闭后,它的文件结构体被释放。,FILE *fp;,返 回,2019/5/24,C与C+程序设计教程-第八章,9,打开文件fopen 函数首部: FILE *fopen(char *filename,char *mode) 功能:按指定方式打开文件。 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL。,8.2.2 文件的打开与关闭,要打开的文件名,使用文件方式,例:文件打开与测试。 FILE *fp; if( fp=fopen(“

6、filename”,“rb+”)=NULL) printf(“cannot open this filen”); exit(0); ,例 FILE *fp; fp= fopen (“c:test”,”rb+”);,系统自动打开和关闭的五个标准设备文件:,2019/5/24,C与C+程序设计教程-第八章,10,文件关闭fclose 函数首部:int fclose(FILE *fp) 功能:关闭fp指向的文件,释放文件结构体和文件指针。 返值:正常为0;出错为非0。,文件打开时返回的文件类型指针,不关闭文件可能会丢失数据,返 回,2019/5/24,C与C+程序设计教程-第八章,11,8.2.3

7、文件的读写 字符输出fputc 函数原型:int fputc(int ch, FILE *fp) 功能:把一字符ch写入fp指向的文件中。 返值:正常,返回ch;出错,为EOF。,字符输入fgetc 函数原型:int fgetc(FILE *fp) 功能:从fp指向的文件中读取一个字符。 返值:正常,返回读取的字符;读到文件尾或出错时,为EOF。,文件I/O与终端I/O #define putc(ch,fp) fputc(ch,fp) #define getc(fp) fgetc(fp) #define putchar(ch) fputc(ch,stdout) #define getchar(

8、 ) fgetc(stdin),2019/5/24,C与C+程序设计教程-第八章,12,例8.5 从键盘输入一些字符,逐个把它们存到磁盘文件中,直到输入#“结束。,#include “stdio.h“ main() char ch, filename20; FILE *fp; scanf(“%s“,filename); if(fp=fopen(filename,“w“)=NULL) printf(“cannot open this filen“); exit(0); while(ch=getchar()!=#) fputc(ch,fp); putchar(ch); fclose(fp); ,f

9、ile1.txt Computer and C#,2019/5/24,C与C+程序设计教程-第八章,13,例8.6 将一个磁盘文件中的信息复制到另一个磁盘文件中,两个文件名由命令行参数给出。,#include “stdio.h“ main (argc,argv) int argc; char *argv; int ch; FILE *fpr,*fpw; if (argc!=3) printf(“you forgot to enter a filenamen“); exit(0); if(fpr=fopen(argv1,“r“)=NULL) printf(“File %s cannot open

10、n“,argv1); exit(0); if(fpw=fopen(argv2,“w“)=NULL) printf(“FILE %s cannot openn“,argv2); exit(0); while(ch=fgetc(fpr)!=EOF) fputc(ch,fpw); fclose(fpr); fclose(fpw); ,C:s8_6 file1.c file2.c,文件结束feof 函数原型: int feof(FILE *fp) 功能:判断文件是否结束。 返值:文件结束,返回真(非0);文件未结束,返回0。,2019/5/24,C与C+程序设计教程-第八章,14,字符串输入 fget

11、s 函数首部: char *fgets(char *str,int length,FILE *fp); 功能:从fp所指向的文件中,至多读length-1个字符,送入字符数组str中, 如果在读入length-1个字符结束前遇换行符或EOF,读入即结束,字符串读入后在最后加一个0字符。 返值:正常,返str指针;出错,返空指针NULL。,字符串输出 fputs 函数首部: int fputs(char *str,FILE *fp); 功能:把str指向的字符串写入fp指向的文件。 返值:正常,返0;出错返EOF。,2019/5/24,C与C+程序设计教程-第八章,15,#include “st

12、dio.h“ #define SIZE 256 main(argc,argv) int argc; char *argv ; char chSIZE; int c,line; FILE *fp; if(argc!=2) printf(“you forgot to enter a filemanen“); exit(0); if(fp=fopen(argv1,“r“)=NULL) printf(“File %s cannot openn“,argv1); exit(0); line=1; while(fgets(ch,SIZE,fp)!=NULL) printf(“%4dt%sn“,line+,

13、ch); fclose(fp); ,例8.7读取文本文件的内容,并加上行号显示。,2019/5/24,C与C+程序设计教程-第八章,16,字段输入fread /输出fwrite 函数首部: int fread(void *buffer,int num_bytes, int count,FILE *fp); int fwrite(void *buffer,int num_bytes, int count,FILE *fp); 功能:读/写数据块。 返值:成功,返回读/写的字段数;出错或文件结束,返回0。 说明: buffer: 指向要输入/输出数据存储区的首地址的指针 num_bytes: 每个

14、要读/写的字段的字节数 count: 要读/写的字段的个数 fp: 要读/写的文件指针 fread与fwrite 一般用于二进制文件的输入/输出。,2019/5/24,C与C+程序设计教程-第八章,17,例 float f2; FILE *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp);,for(i=0;i2;i+) fread(,例 struct student int num; char name20; char sex; int age; float score3; stud10; for(i=0;i10;i+) fread(,2019/5/24

15、,C与C+程序设计教程-第八章,18,例8.8从键盘输入4个学生数据,把他们转存到磁盘文件中去。,#include #define SIZE 4 struct student_type char name10; int num; int age; char addr15; studSIZE; main() int i; for(i=0;iSIZE;i+) scanf(“%s%d%d%s“,studi.name, ,void save() FILE *fp; int i; if(fp=fopen(“c:stu_list“,“wb“)=NULL) printf(“cannot open filen“); exit(0); for(i=0;iSIZE;i+) if(fwrite( ,void display() FILE *fp; int i; if(fp=fopen(“c:stu_list“,“rb“)=NULL) printf(“cannot open filen“); exit(0); for(i=0;i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号