c语言电子教案课件13

PPT
  • 阅读 38 次
  • 下载 0 次
  • 页数 28 页
  • 大小 343.500 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档15.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
c语言电子教案课件13
可在后台配置第一页与第二页中间广告代码
c语言电子教案课件13
可在后台配置第二页与第三页中间广告代码
c语言电子教案课件13
可在后台配置第三页与第四页中间广告代码
c语言电子教案课件13
c语言电子教案课件13
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 28
  • 收藏
  • 违规举报
  • © 版权认领
下载文档15.00 元 加入VIP免费下载
文本内容

【文档说明】c语言电子教案课件13.ppt,共(28)页,343.500 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44561.html

以下为本文档部分文字说明:

UNIXC编程2022-11-24Page‹#›第13章文件知识点:各种读写操作指针操作重点:各种读写操作UNIXC编程2022-11-24Page‹#›13.1C文件概述文件:存储在外部介质上数据的集合,是操作系统数据管理的单位文件分类按文件的逻辑结构:记录文件:由具

有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:文本文件:ASCII文件

,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放UNIXC编程2022-11-24Page‹#›13.1C文件概述文本文件与二进制文件的区别文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果十进制10000“1”的

ASCII码49“0”的ASCII码48UNIXC编程2022-11-24Page‹#›13.1C文件概述文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:低级文件系统,由用户在程序中

为每个文件设定缓冲区UNIXC编程2022-11-24Page‹#›13.1C文件概述读文件与写文件读文件:磁盘文件中的数据传送到计算机内存的操作。写文件:从计算机内存向磁盘文件中传送数据的操作。FILE类型缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为

FILE的结构体描述FILE定义在stdio.h中UNIXC编程2022-11-24Page‹#›13.1C文件概述typedefstruct{shortlevel;/*缓冲区满或空的程度*/unsigned

flags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读取字符*/shortbsize;/*缓冲区的大小*/unsignedchar*buffer;

/*数据缓冲区的位置*/unsignedchar*curp;/*指针,当前的指向*/unsignedistemp;/*临时文件,指示器*/shorttoken;/*用于有效性检查*/}FILE;UNIXC编程2022-11-24Page‹#›13.1C文件概述定义文件类型指针FIL

E*fp;fp指向存放已打开文件的文件信息的结构体变量。简称fp指向已打开的文件UNIXC编程2022-11-24Page‹#›13.2文件的打开与关闭文件使用方式:打开文件-->文件读/写-->关闭文件C文件操作用库函数实现,

包含在stdio.h系统自动打开和关闭三个标准文件:标准输入------键盘stdin标准输出------显示器stdout标准出错输出-----显示器stderrUNIXC编程2022-11-24Page‹#›打开文件fopen

函数原型:FILE*fopen(char*name,char*mode);用法:FILE*fopen("文件名","使用文件方式");功能:返回一个指向指定文件的指针。返值:正常打开,为指向文件结构体的指针;打开失败

,为NULL13.2文件的打开与关闭UNIXC编程2022-11-24Page‹#›13.2文件的打开与关闭使用文件方式文件使用方式含义“r/rb”(只读)为输入打开一个文本/二进制文件“w/wb”(只写)

为输出打开或建立一个文本/二进制文件“a/ab”(追加)向文本/二进制文件尾追加数据“r+/rb+”(读写)为读/写打开一个文本/二进制文件“w+/wb+”(读写)为读/写建立一个文本/二进制文件“a+/ab+”(读写)为读/写打开一个文本/二进制文件文件打开时,系统自动建立文

件结构体变量,并返回指向它的指针UNIXC编程2022-11-24Page‹#›13.2文件的打开与关闭为增强程序的可靠性,常用下面的方法打开一个文件FILE*fp;if((fp=fopen("文件名","使

用方式"))==NULL){printf("Cannotopenthisfile\n");exit(0);}例:FILE*fp;char*filename="c:\test.dat",*read="r";fp=fopen(filename,read);/*OR

fp=fopen("c:\test.dat","r");*/关于exit()函数1)用法:voidexit([程序状态值]);2)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。当“程序状态值”为0时,表示程序正常退出;非0

值时,表示程序出错退出。UNIXC编程2022-11-24Page‹#›13.2文件的打开与关闭关闭文件函数原型:intfclose(FILE*fp)功能:关闭fp指向的文件返值:正常关闭为0;出错时,非0先把缓冲

区中的数据输出到磁盘文件,然后才释放文件指针变量,防止数据缓冲区内的数据丢失。UNIXC编程2022-11-24Page‹#›13.3文件的读写字符的读写fputc函数原型:intfputc(intch,FILE*fp)功能:把一字符ch写入fp指向

的文件中,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)返值:正常,返回ch;出错,为EOF(其值在头文件stdio.h中,被定义为-1)fgetc函数原型:intfgetc(FILE*

fp)功能:从fp指向的文件中读取一字符,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。返值:正常,返回读到的代码值;读到文件尾或出错,为EOFUNIXC编程2022-11-24Page‹#›feof()函数原型:intfeof(FILE*fp)功能:判断

文件是否结束返值:文件结束,返回真(非0);文件未结束,返回013.3文件的读写例:从键盘输入字符,逐个存到磁盘文件中,直到输入'#'为止。#include<stdio.h>main(){FILE*fp;charch,filena

me[10];printf("Pleaseinputfilename:");scanf("%s",filename);/*输入out.txt*/if((fp=fopen(filename,"w"))==NULL){printf("cannotopenfile\n");exit(0);}prin

tf("Pleaseinputstring:");ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}例:输出文本文件的内

容#include<stdio.h>main(){FILE*fp;charch,*filename="out.txt";if((fp=fopen(filename,"r"))==NULL){printf("cannotopenfile\n");ex

it(0);}while((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}例:复制文本文件#include<stdio.h>main(){FILE*in,*ou

t;charch,readfile[10],writefile[10];scanf("%s",readfile);scanf("%s",writefile);if((in=fopen(readfile,"r"))==NULL){printf("Cannotopenread

file.\n");exit(0);}if((out=fopen(writefile,"w"))==NULL){printf("Cannotopenwritefile.\n");exit(0);}while

(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);}UNIXC编程2022-11-24Page‹#›13.3文件的读写字符串的读写函数原型:char*fgets(c

har*s,intn,FILE*fp)intfputs(char*s,FILE*fp)功能:从fp指向的文件读/写一个字符串返值:fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULLfputs正常时返回写入的最后

一个字符;出错为EOFfgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个‘\0’(若读入n-1个字符前遇换行符或文件尾EOF即结束)UNIXC编程2022-11-24Page‹#›13.3文件的读写例:从键盘按格式输入数据存到磁盘文件中去,再从文件读回显示。#includ

e<stdio.h>main(){FILE*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");exit(0);}while(strlen(gets(string))>0){fputs(st

ring,fp);fputs("\n",fp);}/*完成多行字符串*/fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");exit(0);}while(f

gets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);}UNIXC编程2022-11-24Page‹#›13.3文件的读写数据块的读写函数原

型:intfread(void*buffer,intsize,intcount,FILE*fp)intfwrite(void*buffer,intsize,intcount,FILE*fp)功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:

buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数据块的大小(字节数)count:要读/写的数据块的个数fp:要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出UNIXC编程2022-11-24

Page‹#›13.3文件的读写例floatf[2];FILE*fp;fp=fopen(“aa.dat”,“rb”);fread(f,4,2,fp);for(i=0;i<2;i++)fread(&f[i],4,1,

fp);structstudent{intnum;charname[20];charsex;intage;floatscore[3];}stud[10];for(i=0;i<10;i++)fread(&stud

[i],sizeof(structstudent),1,fp);UNIXC编程2022-11-24Page‹#›13.3文件的读写例从键盘输入4个学生数据,把他们转存到磁盘文件中去。#include<stdio.h>#defineSIZE4structstudent_type{charname[

10];intnum;intage;charaddr[15];}stud[SIZE];main(){inti;for(i=0;i<SIZE;i++)scanf("%s%d%d%s",stud[i].name,&st

ud[i].num,&stud[i].age,stud[i].addr);save();display();}voidsave(){FILE*fp;inti;if((fp=fopen("d:\tc\stu_dat","wb"))==NULL){printf("cann

otopenfile\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1)printf("filewriteerror\

n");fclose(fp);}voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\tc\stu_dat","rb"))==NULL){printf("Cannotopenfile\n");return;}for(i=0;i<

SIZE;i++){fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num

,stud[i].age,stud[i].addr);}fclose(fp);}UNIXC编程2022-11-24Page‹#›13.3文件的读写格式化读写函数原型:intfprintf(FILE*fp,char*format,arg

_list)intfscanf(FILE*fp,char*format,arg_list)功能:按格式对文件进行I/O操作返值:成功,返回I/O的个数;出错或文件尾,返回EOFUNIXC编程2022-11-24Page‹#›13.4文

件的定位文件位置指针---指向当前读写位置的指针读写方式顺序读写:位置指针按字节位置顺序移动随机读写:位置指针按需要移动到任意位置rewind函数函数原型:voidrewind(FILE*fp

)功能:重置文件位置指针到文件开头UNIXC编程2022-11-24Page‹#›例#include<stdio.h>main(){FILE*fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");w

hile(!feof(fp1))putchar(getc(fp1));rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);getch();

}UNIXC编程2022-11-24Page‹#›13.4文件的定位fseek函数(由于二进制文件)函数原型:intfseek(FILE*fp,longoffset,intwhence)intfseek(文件类型指针,位移量,起始点)功能:改

变文件位置指针的位置,偏移量取long型数据返值:成功,返回0;失败,返回非0值起始点的取值文件开始SEEK_SET0文件当前位置SEEK_CUR1文件末尾SEEK_END2例fseek(fp,100L,0)指针移到离文件头100字节处f

seek(fp,50L,1)指针移到离当前位置50字节处fseek(fp,-10L,2)指针从文件末尾向后退10字节UNIXC编程2022-11-24Page‹#›13.4文件的定位例在磁盘文件上存有

10个学生的数据,将第1、3、5、7、9个学生的数据输入计算机,并显示。#include<stdio.h>structstudent_type{intnum;charname[10];}stud[10];main(){inti;FILE*fp;if((fp=fopen("st

u_dat","rb"))==NULL){printf("can'topenfile\n");exit(0);}for(i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent

_type),0);fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%s%d%d\n",stud[i].name,stud[i].num);}

fclose(fp);}UNIXC编程2022-11-24Page‹#›13.4文件的定位ftell函数函数原型:longftell(FILE*fp)功能:返回当前位置(用相对文件开头的位移量表示)返值:成功,返回当前位置;失败,返回-1LUNIXC编程2022-11-24

Page‹#›13.4文件的定位例求文件的长度。#include<stdio.h>main(){FILE*fp;charfilename[80];longlength;gets(filename);fp=fopen(filename,"rb");if(fp==NULL)pr

intf("filenotfound!\n");else{fseek(fp,0L,SEEK_END);length=ftell(fp);printf("LengthofFileis%dbytes\n",l

ength);fclose(fp);}}UNIXC编程2022-11-24Page‹#›13.5出错的检测ferror函数函数原型:intferror(FILE*fp)功能:测试文件是否出现错误返值:未出错,返回0值;出

错,返回非0值说明每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试fopen打开文件时,ferror函数初值自动置为0UNIXC编程2022-11-24Page‹#›13.5出错的检测clearerr函数函数原型:voidclear

err(FILE*fp)功能:使文件错误标志置为0说明:出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?