C程序设计文件的输入输出.pptx

上传人:莉*** 文档编号:87179622 上传时间:2023-04-16 格式:PPTX 页数:35 大小:181.68KB
返回 下载 相关 举报
C程序设计文件的输入输出.pptx_第1页
第1页 / 共35页
C程序设计文件的输入输出.pptx_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《C程序设计文件的输入输出.pptx》由会员分享,可在线阅读,更多相关《C程序设计文件的输入输出.pptx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1二进制文件二进制文件 把把数数据据按按其其在在内内存存中中的的形形式式存存储储在在文文件件中中,信信息息在在文文件件中中的的表表示示形形式式与与在在计计算算机机内内存存中中的的表表示示形形式式完完全全一一样样,文文件件中中的的数数据据信信息息可可以以被被分分成成一一个个个个字字节节,但但通通常常是是由由若若干干字字节节构构成成一一个个有有意意义义的的数数据据信信息息。例例如如,由由4个个字字节节信信息构成一个整数。息构成一个整数。正文文件与二进制文件的区别正文文件与二进制文件的区别1.存存储储数数值值型型数数据据的的形形式式不不同同。例如:整数10000 在内存中用4个字节表示,保存到正文文

2、件中要占5个字节;保存到二进制文件中只占4个字节。2.正正文文文文件件的的数数据据是是字字符符,便便于于阅阅读读。但但二二进进制制文文件件中中的的信息难以理解。信息难以理解。文件类型第1页/共35页2缓冲区缓冲区 操作系统为能高效地管理和控制设备,给程序正在使用的每个文件在内存中开辟一个适当大小的缓冲区。程序要从文件读入一些信息时,系统先一次性地读入足够多的信息存于缓冲区中,供程序一部分一部分地使用。程序要写信息到文件时,也先把信息写到缓冲区中,待缓冲区写满或写文件结束时,才把缓冲区中的内容写到文件中。程序要读写文件中的数据,首先打开要读写的文件(写文件时可能要新建文件),然后才能对该文件读写

3、数据,并在使用结束时关闭文件。程序与文件交换数据的实现过程第2页/共35页3文件类型文件类型 FILE 用于存放有关对文件进行操作所需的控制信息结构,如文件名、文件读写状态、文件缓冲区大小和位置、当前读写位置等。文件类型由系统预定义。文件类型指针变量文件类型指针变量 FILE *fp;程序在使用文件前,先调用打开函数。打开函数为文件指定一个FILE类型的结构,并返回该结构的指针。系统通过指向该结构的指针才能正确读写文件。有了文件指针变量,使得C程序能找到与它对应的文件。在程序中若要访问n个文件,一般应设n个文件指针变量。文件类型指针变量第3页/共35页41.文件打开函数文件打开函数 fopen

4、()形式:fopen(文件名,使用方式)功能:分分配配一一个个存存放放文文件件控控制制信信息息的的结结构构,并并返返回回这这个个结结构的指针。构的指针。其中:文件名(包括目录路径)为字符串表达式。函数返回值:函数返回值:如果打开成功,函数返回文件指针;打开不如果打开成功,函数返回文件指针;打开不成功,返回成功,返回NULL。例如:fp=fopen(usr4smp.dat,w);表 示:以 写 方 式 打 开 根 目 录 下 的 usr4子 目 录 中 的 smp.dat 文件。第1个为转义字符8.2 常用的数据文件库函数第4页/共35页5 可能会因某种原因不能打开文件。例如,读文件方式打开一个

5、不存在的文件;在写文件方式下,外部存储介质无剩余的自由空间,或外设故障;或超过系统能同时打开的文件数等。文件不能打开时,函数fopen()将返回空指针值NULL。程序应考虑到文件不能正常打开的极端情况,应用以下形式的代码描述打开一个文件的要求:if(fp=fopen(fname,r)=NULL)printf(不能打开文件%s。n,fname);return;1.文件打开函数文件打开函数 fopen()第5页/共35页6文件使用方式 意 义 r 只读,为读打开正文文件 w 只写,为写打开正文文件 a 追加,从正文文件尾开始写 rb 只读,为读打开二进制文件 wb 只写,为写打开二进制文件 ab

6、追加,从二进制文件尾开始写 r+读写,为读/写打开正文文件 w+读写,为读/写建立并打开新的正文文件 a+读写,为读/写打开正文文件表8-1 8-1 文件使用方式第6页/共35页7形式:fclose(fp)功能:功能:使文件指针变量使文件指针变量fp终止原先调用函数终止原先调用函数 fopen()时所时所建立的与文件的联系。建立的与文件的联系。函数返回值:函数返回值:如果关闭成功,函数返回如果关闭成功,函数返回0;如果检测到错;如果检测到错误,返回误,返回EOF(在stdio.h文件中定义为 1)。例如:fclose(fp);说明:说明:1.文件被关闭后,不能再通过该文件指针变量对其原先文件被

7、关闭后,不能再通过该文件指针变量对其原先相连的文件进行读写操作,除非被再次打开。相连的文件进行读写操作,除非被再次打开。2.文件被关闭后,原文件指针变量又可用来打开其他文文件被关闭后,原文件指针变量又可用来打开其他文件,与其他文件建立新的相联系。件,与其他文件建立新的相联系。2.文件关闭函数文件关闭函数 fclose()第7页/共35页8形式:fgetc(fp)功能:功能:从文件指针从文件指针 fp 指向的文件读入一个字符(类似于指向的文件读入一个字符(类似于getchar函数)。函数)。函数返回值:函数返回值:读入成功,返回读入的字符;读入时遇到文读入成功,返回读入的字符;读入时遇到文件结束

8、,则返回文件结束标记件结束,则返回文件结束标记EOF。例如:ch=fgetc(fp);表示:表示:从从 fp 所指文件读入一个字符存于变量所指文件读入一个字符存于变量 ch。3.从文件读一个字符函数从文件读一个字符函数fgetc()第8页/共35页9形式:fputc(ch,fp)功能:将 ch 中的字符输出到文件指针 fp 指向的文件中(类似于putchar函数)。函数返回值:输出成功,返回输出的字符;输出失败则返回EOF。例如:fputc(A,fp);表示:表示:将大写字母将大写字母 A 写到写到 fp 指向的文件中。4.写一个字符到文件函数写一个字符到文件函数fputc()第9页/共35页

9、10【例1】从键盘上输入字符,依次送入指定的文件,直到输入一个#为止。#include void main()FILE*fp;char ch,fname40;printf(输 入 文 件 名:);scanf(%s,fname);fp=fopen(fname,w);fflush(stdin);/*清输入缓冲区*/printf(开始输入字符串:n);ch=getchar();while(ch!=#)fputc(ch,fp);ch=getchar();fclose(fp);/*关闭文件*/fputc()和fgetc()函数例1设运行情况如下:设运行情况如下:输入文件名输入文件名:d:file1.tx

10、t开始输入字符串开始输入字符串:Fudan University.Shanghai,China.#第10页/共35页11【例2 2】将一个文件中的数据复制到另一个文件中。#include void main()FILE*in,*out;char ch,infile40,outfile40;printf(输入源文件名:);gets(infile);/*或或 scanf(%s%*c,infile);*/if(in=fopen(infile,r)=NULL)printf(不能打开源文件%sn,infile);scanf(%*c);/*/*起暂停作用起暂停作用 */return;fputc()和fge

11、tc()函数例2第11页/共35页12 printf(输入目标文件名:);gets(outfile);out=fopen(outfile,w);while(ch=fgetc(in)!=EOF)fputc(ch,out);fclose(in);fclose(out);fputc()和fgetc()函数例2设运行情况如下:设运行情况如下:输入源文件名:输入源文件名:d:file1.txt输入目标文件名:输入目标文件名:d:file2.txt第12页/共35页13形式:fprintf(文件指针文件指针,格式字符串格式字符串,输出项表输出项表)功能:作用类似于printf函数。函数返回值:输出成功,返

12、回实际输出的字符数;输出失败则返回EOF。例如:fprintf(wp,i=%d r=%6.4fn,i,r);表示:将整型变量 i 和实型变量 r 的值按格式输出到 wp 指向的文件中。5.格式输出函数格式输出函数 fprintf()第13页/共35页14形式:fscanf(文件指针,格式字符串,输入项地址表)功能:作用类似于scanf函数。函数返回值:读取成功,返回实际读入数据的个数;读入失败则返回EOF。例如:fscanf(rp,%d%f,&i,&r);表示:从 rp 指向的文件上为整型变量为整型变量 i 和浮点型变量和浮点型变量 r 读入数据读入数据。6.格式输入函数格式输入函数 fsca

13、nf()第14页/共35页15形式:fgets(str,n,fp)功能:从指定的文件读取 n-1 个字符,并存入字符数组 str 中(类似 gets 函数)。函数返回值:函数返回值:读取成功,返回读取成功,返回 str 的首地址;读入失败则返回NULL地址。说明:1.当当连连续续读读入入 n-1 个个字字符符,或或遇遇到到换换行行符符,或或遇到遇到 文件结束时,读字符过程结束。文件结束时,读字符过程结束。2.字符串读入后,在最后自动加一个0。例如:char a80;FILE *in;while(!feof(in)printf(%s,fgets(a,80,in);表示:将文件内容一行一行地输出。

14、7.从文件读字符串函数从文件读字符串函数fgets()第15页/共35页16形式:fputs(str,fp)功能:将字符串输出到 fp 指向的文件(类似 puts函数)。其中:str 可以是字符串常量、字符数组或字符指针。函数返回值:输出成功,返回最后输出的字符;输出失败,返回EOF。例如:fputs(China,fp);表示:将字符串 China 输出到 fp 指向的文件。8.写字符串到文件函数写字符串到文件函数fputs()第16页/共35页17形式:rewind(fp)功能:将fp指向的文件中的当前读写位置回到文件之首。函数返回值:无。9.回到文件头函数回到文件头函数rewind()第1

15、7页/共35页18形式:fseek(fp,offset,ptname)功能:将文件的当前位置任意移动,实现随机读写。其中:ptname为文件读写的起始位置,只允许0、1或2。0表示文件首(或用SEEK_SET表示);1表示当前位置(或用SEEK_CUR表示);2表示文件尾(或用SEEK_END表示)。offset为long型的位移量,以ptname为基准,移动的字节数。函数返回值:成功移动返回0,否则返回非0。10.文件当前位置移动函数文件当前位置移动函数fseek()第18页/共35页19【例1】fseek(fp,40L,SEEK_SET);表示:将当前位置移到离文件头40个字节处。【例2】

16、fseek(fp,20L,SEEK_CUR);表示:将当前位置移到离当前位置20个字节处。【例3】fseek(fp,-30L,SEEK_END);表示:将当前位置移到文件尾后退30个字节处。说明:fseek 一般用于二进制文件的随机读写。10.函数函数fseek例第19页/共35页20形式:ftell(fp)功能:得到 fp 指向文件当前位置相对于文件首的偏移字节数。函数返回值:文件首到文件当前读写位置的距离(字节数)。例如:fseek(fp,0L,SEEK_END);/*/*当前位置移到文件尾当前位置移到文件尾*/len=ftell(fp);/*/*求文件的长度求文件的长度*/11.文件头到

17、当前位置距离函数文件头到当前位置距离函数ftell()第20页/共35页21形式:fread (buffer,size,count,fp)功能:从fp指向的文件读入count*size个字节,存入buffer。函数返回值:读取成功返回count值,否则返回0。说明:常用于二进制文件的读。其中:buffer:字符数组名或指针 size:读写数据块的字节数 count:读写数据块的个数 fp:文件指针12.成批读数据函数成批读数据函数fread()第21页/共35页22形式:fwrite (buffer,size,count,fp)功能:从buffer中取出数据,向fp指向的文件写count*si

18、ze个字节。函数返回值:写文件成功返回count值,否则count。说明:常用于二进制文件的写。其中:buffer:字符数组名或指针 size:读写数据块的字节数 count:读写数据块的个数 fp:文件指针13.文件头到当前位置距离函数文件头到当前位置距离函数fwrite()第22页/共35页23 一个完整的文件处理程序,必须包含下列内容:一个完整的文件处理程序,必须包含下列内容:(1)在在程程序序的的开开始始处处定定义义文文件件指指针针变变量量,和和存存储储文文件件名名的的字符数组。字符数组。例如:例如:#include FILE*fp;/*定义文件指针变量定义文件指针变量fp*/char

19、 fname40;/*存储文件目录路径存储文件目录路径*/(2)用类似下面的代码输入文件名。用类似下面的代码输入文件名。printf(请请输输入入文文件件名名(包包括括文文件件的的目目录录路路径径、文文件件的的扩展名扩展名)n);scanf(%s%*c,fname);/*输输入入文文件件名名及及其其随随后后的回车符的回车符*/说明:说明:可以使用可以使用gets(fname);来代替来代替scanf。8.3 文件处理程序结构第23页/共35页248.3 文件处理程序结构(3)使用文件前,按使用要求先打开文件。使用文件前,按使用要求先打开文件。例如:例如:if(fp=fopen(fname,r)

20、=NULL)/*以读文件方式打开以读文件方式打开*/printf(”%s 文文件件不不能能打打开开,结结束束程程序序的的执执行行n”,fname);return;说明:说明:1.如果要向文件写数据,应使用写文件打开:如果要向文件写数据,应使用写文件打开:fp=fopen(fname,w);/*以写文件方式打开以写文件方式打开*/2.读读打打开开时时,要要求求被被打打开开文文件件已已存存在在。写写打打开开时时,如如果果被被打打开开文文件件不不存存在在,则则建建立立一一个个以以fname内内容容命命名名的的新新文文件件;如如果果被被打打开开文文件件已已存存在在,则则该该文文件件上上的的数数据据被被

21、清清除。除。第24页/共35页258.3 文件处理程序结构(4)文件使用结束后,要及时关闭。文件使用结束后,要及时关闭。例如:例如:fclose(fp);/*以后以后 fp 又可用于打开文件又可用于打开文件*/(5)调用库函数对数据文件进行输入输出。调用库函数对数据文件进行输入输出。见见8.2介绍的文件库函数。介绍的文件库函数。第25页/共35页26#include FILE*fp;void main()int x,k;char fname40;printf(输 入 文 件 名:);scanf(%s%*c,fname);fp=fopen(fname,w);k=1;while(scanf(%d,

22、&x)=1)/*能正确输入整数循环*/fprintf(fp,%dt,x);if(k+%5=0)fprintf(fp,n);fclose(fp);printf(n共输出了%d 个整数到文件%s.n,k-1,fname);【例8.1】从键盘输入整数序列,并按输入顺序输出到指定文件输入文件名:输入文件名:d:file1.txt1 2 3 4 5 6 7 8a共输出了 8 个整数到文件d:file1.txt第26页/共35页27#include FILE*fp;int main()int x,k;char fname40;printf(输入文件名输入文件名:);scanf(%s%*c,fname);i

23、f(fp=fopen(fname,r)=NULL)/*以以输输入方式打开正文文件入方式打开正文文件*/printf(不能打开文件不能打开文件%s。n,fname);return 0;【例8.2】从指定的文件输入整数,并按输入顺序输出到显示屏上 第27页/共35页28 k=1;while(fscanf(fp,%d,&x)=1)printf(%dt,x);if(k+%5=0)printf(n);fclose(fp);printf(n从从 文文 件件%s 输输 入入 了了%d 个个 整整 数数.n,fname,k-1);return 1;【例8.2】从指定的文件输入整数,并按输入顺序输出到显示屏上

24、输入文件名:输入文件名:d:file1.txt1 2 3 4 5 6 7 8从文件 d:file1.txt 输入了 8 个整数.第28页/共35页29#include FILE*fp;void main()int ch;char fname40;printf(输入文件名输入文件名:);scanf(%s%*c,fname);fp=fopen(fname,w);【例8.3】逐行复制从键盘输入字符到指定文件,直至输入空行结束 第29页/共35页30 while(ch=getchar()!=n)/*逐逐行行处处理理,至空行结束至空行结束*/do fputc(ch,fp);/*行内字符逐一复制行内字符逐

25、一复制*/while(ch=getchar()!=n);/*处处理理当当前前行行*/fputc(ch,fp);/*输出换行符输出换行符*/fclose(fp);printf(程序复制键盘输入字符结束。程序复制键盘输入字符结束。n);【例8.3】逐行复制从键盘输入字符到指定文件,直至输入空行结束 输入文件名:输入文件名:d:file1.txtFudan University.Shanghai,China.程序复制键盘输入字符结束。第30页/共35页31【例例8.4】输输入入一一篇篇英英文文短短文文,统统计计文文件件中中的的行行数数、单单词词数和字符数的程序。数和字符数的程序。设设全全由由英英文文

26、字字母母组组成成的的一一段段连连续续字字符符序序列列为为一一个个英英文文单单词词。程程序序为为统统计计单单词词数数,需需要要标标识识一一个个单单词词的的开开始始和和结束,程序引入一个状态变量。结束,程序引入一个状态变量。如如果果程程序序遇遇到到一一个个非非英英文文字字母母字字符符,程程序序设设置置状状态态不不在在单单词词中中;如如果果程程序序遇遇到到一一个个英英文文字字母母字字符符,程程序序的的原原先先状状态态又又不不在在单单词词中中,表表示示程程序序遇遇到到一一个个新新的的单单词词,程程序将单词计数器增序将单词计数器增1,并置状态在单词中。,并置状态在单词中。8.4 文件处理程序实例解题思路

27、第31页/共35页32#include#include#define INWORD 1 /*正在单词中正在单词中*/#define OUTWORD 0 /*当前不在单词中当前不在单词中*/FILE*fp;int main()int nl,nw,nc,ch,state;/*状态变量状态变量*/char fname40;/*存储文件名存储文件名*/printf(输入文件名输入文件名:);scanf(%s%*c,fname);if(fp=fopen(fname,r)=NULL)printf(不能打开文件不能打开文件%s。n,fname);return 0;8.4 文件处理程序实例程序第32页/共35

28、页33state=OUTWORD;nl=nw=nc=0;while(ch=fgetc(fp)!=EOF)/*这里对刚输入的字符信息这里对刚输入的字符信息 ch 作某种处理作某种处理 */+nc;if(ch=n)+nl;if(!isalpha(ch)/*ch中中内内容容不不是是英英文文字字母母*/state=OUTWORD;else if(state=OUTWORD)/*从从原原先先不不在在单词中,遇到了英文字母单词中,遇到了英文字母*/state=INWORD;/*置状态在单词中置状态在单词中*/+nw;/*单词计数器增单词计数器增1*/8.4 文件处理程序实例程序第33页/共35页34fclose(fp);printf(“文文件件%s 有有%d 行行、有有%d 单单词词和和有有%d 字字符符.n,fname,nl,nw,nc);return 1;8.4 文件处理程序实例程序输入文件名:输入文件名:d:file1.txt文件 d:file1.txt 有 2 行、有 4 单词和有 35 字符.d:file1.txt文件中的内容如下:文件中的内容如下:Fudan University.Shanghai,China.第34页/共35页35感谢您的欣赏!第35页/共35页

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

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁