程序设计基础C语言第13章-文件操作课件

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

【文档说明】程序设计基础C语言第13章-文件操作课件.ppt,共(43)页,1.097 MB,由小橙橙上传

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

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

精选课件ppt1第13章文件操作精选课件ppt2内容提要二进制文件和文本文件文件的打开和关闭文件的顺序读写与随机读写精选课件ppt3VonJ.Neumannarchitecture输入/输出设备存储器运算器控制器程序和输入数据输出结果取出数据存入数据操作命令存

取命令取出程序指令输入输出命令计算结果CPU大脑记忆装置(Memory)眼睛和耳朵(I/Odevices)Wheretoputdataincomputer?Howtoinputoroutputdata?精选课件ppt4I/O设备输入设备键盘、鼠标软盘、硬盘

、光驱(以文件的形式)扫描仪、视频采集卡、电视卡、游戏杆、话筒……输出设备显示器、打印机软盘、硬盘、CD/DVD-RW(以文件的形式)音箱……精选课件ppt5内存:程序运行时申请,程序结束时释放,无法保存

数据,数据会随着程序的结束而丢失。#include<stdio.h>structstudent{intnum;charname[10];floatscore[3];};voidmain(){structstudentstu[

3];inti;printf("请输入学生信息\n");for(i=0;i<3;i++)scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&st

u[i].score[2]);for(i=0;i<3;i++)printf("%d%s%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}精选课件ppt6如何在程序结束

后依然保留数据?以文件的形式放在外存上文件:存储在外存上有名字的一组相关数据的集合精选课件ppt7文件的存放(Storage)可以建立若干文件目录(directory\folder文件夹)在目录里保存文件同一级目录里保存的文件不能同名对使用者而言,只要知道文件的路径(pat

h,全目录)和文件名,就能使用该文件C:\home\Sunner\main.c这都是托OS的福精选课件ppt813.1二进制文件和文本文件二进制文件是一种字节序列,没有字符变换按照数据在内存中的存储形式(二进制)存储到文件如短整数123,在内存占2

个字节,则文件中也占2个字节文本文件/ASCII码文件是一种字符序列,文件中存储每个字符的ASCII码如整数123在文件中占3个字节,分别存放这3个字符的ASCII码如果存整数1234呢?精选课件ppt9ASCII文件和二进制文件的比较:ASCII文件便于

对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间。二进制文件可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,以后又

需要输入内存的,常用二进制文件保存。精选课件ppt10文件的格式(FormatofFiles)数据必须按照存入的类型读出,才能恢复其本来面貌公开的标准格式如bmp、tif、gif、jpg和mp3等类型的文件,有大量软件能生成

和使用这些类型的文件不公开或加密的文件格式如MicrosoftWord的doc格式就不公开,所以至今没有Word以外的其它软件能完美地读出doc文件精选课件ppt11•所有有关文件的操作都离不开文件指针•用文件指针代表一个文件,对文件的操作都是通过相应文件的文件指针来完成•文件指针是

C为我们提供的一种文件类型的指针变量,它的具体定义方法是FILE*fp;•有了这样的定义之后,fp就可以指向一个文件精选课件ppt12文件指针()#include<stdio.h>FILE*fp;typedefstruct{shortlevel;/*缓冲区‘满’

或‘空’的程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读字符*/shortbsize;/*缓冲区的大小*/unsignedchar*buffer;

/*数据缓冲区的位置*/unsignedchar*curp;/*指针当前的指向*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;/*在stdio.h文件中

定义*/对文件的操作都是通过各种函数来实现的精选课件ppt1313.2文件的打开和关闭文件的打开(fopen()函数)FILE*fopen(constchar*,constchar*mode);FILE*fp=fopen("C:\\CONFIG.SYS","rw"

);是文件名包含路径。如果不含路径,表示打开当前目录下的文件mode是打开方式常用为"r"、"w"、"rw"和"a",分别表示只读、只写、读写和添加"rb"表示只读二进制文件返回值为指向此文件的指针,留

待以后使用如果打开失败,返回值为NULL精选课件ppt14文件打开方式(mode):对应二进制文件对应文本文件“r”只读必须是已存在的文件。“w”只写不论该文件是否存在,都新建一个文件。“a”追加向文本文件尾增加数据,该文件必须存在“r+”读写打开一个

已存在的文件,用于读写。“w+”读写建立一个新文件,可读可写。“a+”读写向文件尾追加数据,也可读。“rb”“wb”“ab”“rb+”“wb+”“ab+”精选课件ppt1513.2文件的打开和关闭文件的关闭(fclose(

)函数)intfclose(FILE*fp);使文件指针变量和文件脱钩,释放文件所占的缓冲区fclose函数的返回值当顺利地执行了关闭操作,返回值为0;如果返回值为非零值,表示关闭时有错误。一般只有驱动器中无盘或盘空间不够时才失败,关闭失败

会引起数据丢失、文件的破坏和程序中的随机错误。精选课件ppt16例:文件的打开和关闭#include<stdio.h>voidmain(){FILE*fp;if((fp=fopen("test.txt","r"))==NULL){pri

ntf("Failuretoopendemo.txt!\n");exit(0);}fclose(fp);}精选课件ppt1713.3按字符读写文件字符读写intfgetc(FILE*fp);从fp读出一个字符,将位置指针指向下一个字符若读成

功,则返回该字符,若读到文件尾,则返回EOF(EOF是一个符号常量,在stdio.h中定义为-1)intfputc(intc,FILE*fp);向fp输出字符c若写入错误,则返回EOF,否则返回c精选课件ppt1813.3按字符读写文件【例13.1】从键盘键入一串字符,转存到磁盘文件

上为什么要判断文件打开是否成功呢?#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charch;if((fp=fopen("demo.txt","w"))==NULL){printf("Failuretoop

endemo.txt!\n");exit(0);}ch=getchar();while(ch!='\n'){fputc(ch,fp);ch=getchar();}fclose(fp);}精选课件ppt19#include<stdio.h>#include<st

dlib.h>voidmain(){FILE*fp;charch;inti;if((fp=fopen("demo.bin","wb"))==NULL){printf("Failuretoopendemo.bin!\n");ex

it(0);}for(i=0;i<128;i++)fputc(i,fp);fclose(fp);if((fp=fopen("demo.bin","rb"))==NULL){printf("Failuretoopendemo.bin!\n");exit(0);}whi

le((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}【例13.2】将0~127之间的ASCII字符写到文件中,然后从文件中读出并显示到屏幕上函数feof()检查是否到达文件尾,当文件位置指针指向文件尾时,返回非0值

,否则返回0值精选课件ppt20【例13.3】修改例13.2,从文件中读出字符时,判断是否为可打印字符,若是则显示该字符,否则显示其十进制ASCII码值while((ch=fgetc(fp))!=EO

F)if(isprint(ch))printf("%c\t",ch);elseprintf("%d\t",ch);精选课件ppt21例:复制文件#include<stdlib.h>#include<stdio.h>voidmain(){FILE*in,*out;

charin],out];printf("Enterthein:\n");scanf("%s",infile);printf("Entertheout:\n");scanf("%s",outfile);if((in=fo

pen(infile,"rb"))==NULL){printf("cannotopeninfile\n");exit(0);}if((out=fopen(outfile,"wb"))==NULL){printf("cannotopenout

file\n");exit(0);}while(!feof(in))fputc(fgetc(in),out);fclose(in);fclose(out);}精选课件ppt22例:复制文件,利用命令行参数输入两个文件名#include<stdlib.h>#include<stdio.h>main(

intargc,char*argv[]){FILE*in,*out;if(argc!=3){printf("Youforgottoentera\n");exit(0);}if((in=fopen(argv[1],"rb"))==NULL){printf("c

annotopeninfile\n");exit(0);}if((out=fopen(argv[2],"wb"))==NULL){printf("cannotopenoutfile\n");exit(0);}while(!fe

of(in))fputc(fgetc(in),out);fclose(in);fclose(out);}精选课件ppt2313.5按数据块读写文件按数据块读写从fp所指的文件中读取数据块并存储到buffer指向的内存中buffer是待读入数块据的起始地址size是每个数据块的大小(待读

入的每个数据块的字节数)count是最多允许读取的数据块个数(每个数据块size个字节)返回实际读到的数据块个数将buffer指向的内存中的数据块写入fp所指的文件精选课件ppt24使用举例:若文件以二进制形

式打开:fread(f,4,2,fp);此函数从fp所指向的文件中读入2个4个字节的数据,存储到指针f所指向的空间中。精选课件ppt25使用举例:若有如下结构类型:structstudent_type{charname[10];intnum;inta

ge;charaddr[30];}stud[40];可以用fread和fwrite来进行数据的操作:for(i=0;i<40;i++)fread(&stud[i],sizeof(structstudent_type),1,fp);for(i=0;i<40,i++)fwr

ite(&stud[i],sizeof(structstudent_type),1,fp);fread(stud,sizeof(structstudent_type),40,fp);fwrite(stud,sizeof(structstudent_typ

e),40,fp);精选课件ppt26例从键盘输入4个学生的有关数据,然后把它们转存到磁盘文件上去。#include<stdio.h>#defineSIZE4typedefstructstudent_type{charname[10];intnum;intage;cha

raddr[15];}STUDENT;voidmain(){voidsave(STUDENTstud[]);STUDENTstud[SIZE];inti;for(i=0;i<SIZE;i++)scanf("%s%d%d%s",stud[i].name,&stud[i]

.num,&stud[i].age,stud[i].addr);save(stud);}精选课件ppt27voidsave(STUDENTstud[]){FILE*fp;inti;if((fp=fopen("stu_list","wb"))==NUL

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

);fclose(fp);}精选课件ppt28例验证上面程序生成的stu_list文件是否存在,从文件中读出数据并显示在屏幕上。#include<stdio.h>#defineSIZE4structstudent{charname[1

0];intnum;intage;charaddr[15];};voidmain(){structstudentstud;inti;FILE*fp;if((fp=fopen("stu_list","rb"))==NULL){printf("打开文件错误!\n");

return;}for(i=0;i<SIZE;i++){fread(&stud,sizeof(structstudent),1,fp);printf("%-10s%4d%4d%15s\n",stud.name,stud.num,stud.age,stud.addr);}fclose(fp

);}精选课件ppt29【例13.7】在例12.7基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上精选课件ppt30【例13.7】在例12.7基础上,计算每个学生的4门课程的平均分,将学生

的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上精选课件ppt31【例13.7】在例12.7基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,

然后再从文件中读出数据并显示到屏幕上精选课件ppt32【例13.7】在例12.7基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上精选课件ppt33【例13.7】在例12.7

基础上,计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上精选课件ppt34【例13.7】在例12.7基础上,计算每个学生的4门课程的平均分,将学生的

各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上精选课件ppt3513.3按字符读写文件字符串读写char*fgets(char*s,intn,FILE*fp);从fp所指的文件中读

取字符串并在字符串末尾添加'\0',然后存入s,最多读n-1个字符当读到回车换行符、文件末尾或读满n-1个字符时函数返回该字符串的首地址intfputs(constchar*s,FILE*fp);将字符串写入文件中若出现

写入错误,则返回EOF,否则返回一个非负数精选课件ppt3613.4按格式读写文件格式化读写intfscanf(FILE*fp,constchar*format,...);fscanf(fp,"%d,%f",&i,&t);第1个参

数为文件指针,第2个参数为格式控制参数,第3个参数为地址参数表列intfprintf(FILE*fp,constchar*format,...);fprintf(fp,"%d,%6.2f",i,t);第1个参

数为文件指针,第2个参数为格式控制参数,第3个参数为输出参数表列精选课件ppt37文件读写函数:分类函数名功能打开文件fopen()打开文件关闭文件fclose()关闭文件文件读写fgetc()从指定文件取得一个字符fputc()把字符

输出到指定文件fgets()从指定文件读取字符串fputs()把字符串输出到指定文件fread()从指定文件中读取数据项fwrite()把数据项写到指定文件中fscanf()从指定文件按格式输入数据fprintf()按指定格式将数据写到指定文件中精选课件ppt3813.6扩

充内容13.6.1文件的随机读写fseek()改变文件位置指针的位置rewind()使文件位置指针重新置于文件开头ftell()返回文件位置指针的当前值精选课件ppt39rewind函数:使位置指针重新返回文件的开头,无

返回值。例有一个磁盘文件,第一次将它的内容显示在屏幕上,第二次把它复制到另一文件上。#include<stdio.h>voidmain(){FILE*fp1,*fp2;fp1=fopen("","r");fp2=fopen("","w");

while(!feof(fp1))putchar(fgetc(fp1));rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}精

选课件ppt40fseek函数函数功能:改变文件的位置指针。函数调用形式:fseek(文件类型指针,位移量,起始点)起始点:文件开头SEEK_SET0文件当前位置SEEK_CUR1文件末尾SEEK_END2位移量:以起始点为

基点,向前移动的字节数。一般要求为long型。精选课件ppt41fseek函数应用举例fseek(fp,100L,0);将位置指针移到离文件头100个字节处。fseek(fp,50L,1);将位置指针移到离当前位置50个字节处。fseek(fp,-10L,

2);将位置指针从文件末尾处向后退10个字节。精选课件ppt42#include<stdlib.h>#include<stdio.h>structstudent_type{charname[10];intnum;intage;char

sex;}stud;voidmain(){inti;FILE*fp;if((fp=fopen("stud_dat","rb"))==NULL){printf("cannotopenfile\n");exit(0);}for(

i=0;i<10;i+=2){fseek(fp,i*sizeof(structstudent_type),0);fread(&stud,sizeof(structstudent_type),1,fp);printf("%s%d%d%c\n",

stud.name,stud.num,stud.age,stud.sex);}fclose(fp);}例在磁盘文件上存有10个学生的数据。要求将第1、3、5、7、9个学生数据输入计算机,并在屏幕上显示出来。精选课件ppt43ftell函数函数作用:得到流式文件中的当前位置,用相对于文件开头的位移

量来表示。返回值:返回当前位置,出错时返回-1L。应用举例:i=ftell(fp);if(i==-1L)printf(“error\n”);

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