《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt

上传人:eieieie 文档编号:21713204 上传时间:2023-11-03 格式:PPT 页数:65 大小:575KB
返回 下载 相关 举报
《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt_第1页
第1页 / 共65页
《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt_第2页
第2页 / 共65页
《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt_第3页
第3页 / 共65页
《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt_第4页
第4页 / 共65页
《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计实用教程》课件第9章 文件的输入和输出处理.ppt(65页珍藏版)》请在三一文库上搜索。

1、9.1 文件的基本概念文件的基本概念9.2 文件的打开与关闭文件的打开与关闭9.3文件的顺序读写文件的顺序读写9.4文件的随机读写文件的随机读写9.1 文件的基本概念文件的基本概念n文件文件:一组相关数据的有序集合,这一组相关数据的有序集合,这个数据集的名称,叫做文件名个数据集的名称,叫做文件名。n文件有多种类型,如源程序文件、目标文件有多种类型,如源程序文件、目标文件、可执行文件、库文件文件、可执行文件、库文件 n文件通常是驻留在外部介质文件通常是驻留在外部介质,如磁盘如磁盘9.1.1 文件的分类文件的分类 n从用户的角度,分为从用户的角度,分为普通文件普通文件与与设备文件设备文件:n普通文

2、件:驻留在磁盘或其它外部介质上的一个有普通文件:驻留在磁盘或其它外部介质上的一个有序数据集。序数据集。n程序文件:源文件、目标文件、可执行程序程序文件:源文件、目标文件、可执行程序n数据文件:输入输出数据。数据文件:输入输出数据。n设备文件:与主机相联的各种外部设备。设备文件:与主机相联的各种外部设备。n如显示器(标准输出文件)、打印机、键盘如显示器(标准输出文件)、打印机、键盘(标准输出文件)等。在操作系统中,把外部(标准输出文件)等。在操作系统中,把外部设备也看作是一个文件来进行管理。设备也看作是一个文件来进行管理。9.1.1 文件的分类文件的分类n从文件编码的方式,分为:从文件编码的方式

3、,分为:ASCII码文件码文件和和二二进制码进制码(binary)文件文件。nASCII(text)文件:在磁盘中存放时,每一个字节文件:在磁盘中存放时,每一个字节存放一个字符对应的存放一个字符对应的ASCII码。码。nASCII码文件可在屏幕上按字符显示。能读懂文码文件可在屏幕上按字符显示。能读懂文本文件内容本文件内容 n如源程序文件。文本编辑器如记事本可显示文本如源程序文件。文本编辑器如记事本可显示文本文件的内容。文件的内容。n二进制文件:按二进制文件:按二进制形式二进制形式来存放的。来存放的。n二进制文件虽然也可在屏幕上显示,二进制文件虽然也可在屏幕上显示,但其内容但其内容无法读懂。如可

4、执行文件。无法读懂。如可执行文件。n每一个文件都有唯一的文件名(文件标每一个文件都有唯一的文件名(文件标识),以便用户识别和引用识),以便用户识别和引用。n文件标识包括三部分:文件标识包括三部分:(1)文件路径文件路径(2)文件名文件名(3)后缀后缀名(类型名)名(类型名)9.2.1文件名文件名 n文件路径表示文件在外部存储设备中的位文件路径表示文件在外部存储设备中的位置。如:置。如:C:DocumentMyfile1.docn表示表示file1.doc文件存放在文件存放在c盘中的盘中的Document目录下的目录下的My子目录下面子目录下面文件路径文件路径文件名文件名文件后缀文件后缀9.2.

5、1文件名文件名 n文件路径表示文件在外部存储设备中的位文件路径表示文件在外部存储设备中的位置。如:置。如:C:DocumentMyfile1.docn表示表示file1.doc文件存放在文件存放在c盘中的盘中的Document目录下的目录下的My子目录下面子目录下面文件名文件名9.2.1文件名文件名 n文件路径表示文件在外部存储设备中的位文件路径表示文件在外部存储设备中的位置。如:置。如:C:DocumentMyfile1.docn表示表示file1.doc文件存放在文件存放在c盘中的盘中的Document目录下的目录下的My子目录下面子目录下面一般不超过一般不超过3个字母个字母(doc、tx

6、t、dat、c、cpp、obj、exe、ppt、bmp等)等)9.2.1文件名文件名 9.1.3 文件类型指针文件类型指针 n文件指针文件指针:当一个文件被打开时,用一个指针当一个文件被打开时,用一个指针变量指向该文件,变量指向该文件,这个指针被称做文件类型这个指针被称做文件类型指针。指针。n声明文件指针的语句形式:声明文件指针的语句形式:FILE*指针变量;指针变量;nFILE是由系统定义的一个结构,是由系统定义的一个结构,含有文件名、文含有文件名、文件状态和文件当前位置等信息。件状态和文件当前位置等信息。例如:例如:FILE*fp;表示表示fp是指向是指向FILE结构的指针变量。结构的指针

7、变量。n通过通过fp实施对文件的各种操作:文件的打开、实施对文件的各种操作:文件的打开、关闭、读、写、关闭、读、写、定位等各种操作。定位等各种操作。9.2 文件的打开与关闭文件的打开与关闭n文件在进行读写操作之前要先打开,使用完毕文件在进行读写操作之前要先打开,使用完毕要关闭。要关闭。n打开文件:建立文件的有关信息,并使文件指打开文件:建立文件的有关信息,并使文件指针指向该文件,以便进行其它操作。针指向该文件,以便进行其它操作。n所谓所谓“打开打开”:为文件建立相应的信息区为文件建立相应的信息区(用来存用来存放有关文件的信息放有关文件的信息)和文件缓冲区和文件缓冲区(用来暂时存放输用来暂时存放

8、输入输出的数据入输出的数据)。n关闭文件:断开指针与文件之间的联系,禁止关闭文件:断开指针与文件之间的联系,禁止再对该文件进行读写操作。再对该文件进行读写操作。9.2.1 文件的打开文件的打开 n函数函数fopen调用的一般形式为:调用的一般形式为:文件指针名文件指针名=fopen(文件名文件名,使用文件方式使用文件方式);n“文件指针名文件指针名”:FILE 类型的指针变量;类型的指针变量;n“文件名文件名”为字符串常量或字符串数组名;为字符串常量或字符串数组名;n“使用文件方式使用文件方式”指明文件的类型和操作要求指明文件的类型和操作要求例如例如:FILE*fp;fp=fopen(file

9、.a,r);在当前目录下打开文件在当前目录下打开文件“file.a”,只允许进行,只允许进行“读读”操作,并使操作,并使fp指向该文件。指向该文件。9.2.1 文件的打开文件的打开 n函数函数fopen调用的一般形式为:调用的一般形式为:文件指针名文件指针名=fopen(文件名文件名,使用文件方式使用文件方式);例如例如:FILE*fpe fpe=fopen(c:p1.exe,rb)打开打开C驱动器磁盘的根目录下的文件驱动器磁盘的根目录下的文件“p1.exe,只,只允许按二进制方式进行读操作。两个反斜线允许按二进制方式进行读操作。两个反斜线“”是用转义字符表示的根目录是用转义字符表示的根目录“

10、”。9.2.1 文件的打开文件的打开n文件的使用方式说明:文件的使用方式说明:由由r、w、a、t、b、+6个字符拼成,各字符的个字符拼成,各字符的含义是:含义是:r(read):读;读;w(write):写写 a(append):追加追加 t(text):文本文件文本文件(默认值默认值)b(banary):二进制文件二进制文件 +:读和写读和写9.2.1 文件的打开文件的打开n在打开一个文件时,如果出错,在打开一个文件时,如果出错,fopen将返回一个空指针值将返回一个空指针值NULL。n常用以下程序段打开文件:常用以下程序段打开文件:if(fp=fopen(d:p1.exe,rb)=NULL

11、)printf(error on open d:p1.exe!);getch();/从键盘输入一个字符,但不在屏幕上显示从键盘输入一个字符,但不在屏幕上显示 exit(1);9.2.2 文件的关闭文件的关闭n函数函数fclose调用的一般形式是:调用的一般形式是:fclose(文件指针文件指针);例如:例如:fclose(fp);n正常完成关闭文件操作时,正常完成关闭文件操作时,fclose函数函数返回值为返回值为0。如返回非零值则表示有错误。如返回非零值则表示有错误发生。发生。9.3文件的顺序读写文件的顺序读写n语言提供了文件读写函数语言提供了文件读写函数n字符读写函数字符读写函数:fget

12、c和和fputc;n字符串读写函数:字符串读写函数:fgets和和fputsn格式化读写函数:格式化读写函数:fscanf和和fprinfn数据块读写函数:数据块读写函数:freed和和fwrite,n使用这些函数时,程序要求包含头文件使用这些函数时,程序要求包含头文件stdio.h。9.3.1 向文件读写字符向文件读写字符nfgetc和和fputc函数函数:以字符为单位的读以字符为单位的读写。写。n每次可从文件读出或向文件写入一个字符。每次可从文件读出或向文件写入一个字符。9.3.1 向文件读写字符向文件读写字符1.读字符函数读字符函数fgetc nfgetc函数的功能函数的功能:从指定的文

13、件中读入从指定的文件中读入一个字符一个字符n调用形式:调用形式:ch=fgetc(fp);nch:字符型变量字符型变量nfp是文件指针是文件指针9.3.1 向文件读写字符向文件读写字符1.读字符函数读字符函数fgetc 例如:例如:ch=fgetc(fp);从打开的文件从打开的文件fp中读取一个字符并送入中读取一个字符并送入ch中。中。9.3.1 向文件读写字符向文件读写字符1.读字符函数读字符函数fgetcn说明:说明:1)要读取的文件必须以要读取的文件必须以读读或或读写方式读写方式打开打开2)在文件内部有一个在文件内部有一个位置指针位置指针。用来指向文。用来指向文件的当前读写字节。件的当前

14、读写字节。n在文件打开时,该指针指向文件的第一个字节。在文件打开时,该指针指向文件的第一个字节。n调用调用fgetc 函数后,该位置指针将向后移动一函数后,该位置指针将向后移动一个字节。个字节。3)函数的返回值:函数的返回值:n当读字符成功时,返回所读的字符;当读字符成功时,返回所读的字符;n失败时返回文件结束标志失败时返回文件结束标志EOF(即(即-1)。)。9.3.1 向文件读写字符向文件读写字符n文件内部的位置指针:文件内部的位置指针:文件打开时:文件打开时:读一字符后:读一字符后:例例9-1 读入读入c盘根目录下的一文本文件盘根目录下的一文本文件text1.txt,在屏幕上输出其文件内

15、容。,在屏幕上输出其文件内容。#include void main()FILE*fp;char ch;if(fp=fopen(c:text1.txt,rt)=NULL)/打开文件不成功打开文件不成功 printf(nCannot open file c:text1.txt!nStrike any key exit!);getch();exit(1);while(ch=fgetc(fp)!=EOF)/读入一字符读入一字符putchar(ch);/显示字符显示字符 fclose(fp);putchar(n);例例9-1 读入读入c盘根目录下的一文本文件盘根目录下的一文本文件text1.txt,在屏

16、幕上输出其文件内容。在屏幕上输出其文件内容。n程序执行步骤:程序执行步骤:(1)先用记事本创建一个文件)先用记事本创建一个文件text1.txt,内容,内容第一行为第一行为“我在学习用我在学习用fgetc()函数读入一字函数读入一字符。符。”,第二行为,第二行为“成功啦!成功啦!”,并将此文件,并将此文件并放在并放在C盘根目录下;盘根目录下;(2)运行程序,得到结果:)运行程序,得到结果:我在学习用我在学习用fgetc()函数读入一字符。函数读入一字符。成功啦!成功啦!9.3.1 向文件读写字符向文件读写字符2.写字符函数写字符函数fputc n函数调用一般格式:函数调用一般格式:fputc(

17、ch,fp);nch:要写的字符:要写的字符nFp:文件指针文件指针例如:例如:fputc(a,fp);9.3.1 向文件读写字符向文件读写字符2.写字符函数写字符函数fputc n调用格式:调用格式:fputc(ch,fp);n说明:说明:1)被写入的文件可以用被写入的文件可以用写写、读写读写、追加追加方式打方式打开。开。2)每写入一个字符,文件内部位置指针向后移每写入一个字符,文件内部位置指针向后移动一个字节。动一个字节。3)函数的返回值:函数的返回值:n写入成功则写入成功则,返回写入的字符,返回写入的字符,n否则返回一个否则返回一个EOF。9.3.1 向文件读写字符向文件读写字符 例例9

18、-2 从键盘输入一行字符串,写从键盘输入一行字符串,写入文件入文件text2.txt中。并将该文件内中。并将该文件内容显示在屏幕上容显示在屏幕上main()FILE*fp;char ch,outfile20;printf(输入要写入文件名?输入要写入文件名?);scanf(%s,outfile);if(fp=fopen(outfile,wt+)=NULL)printf(Cannot open this file,Strike any key exit!“);getch();exit(1);printf(输入一行字符串:输入一行字符串:n);fflush(stdin);/清空输入缓冲区清空输入缓

19、冲区while(ch=getchar()!=n)/从键盘读入一字符从键盘读入一字符fputc(ch,fp);/逐个字符写入文件逐个字符写入文件rewind(fp);/把文件内部的位置指针移到文件首把文件内部的位置指针移到文件首while(ch=fgetc(fp)!=EOF)/从文件重复地读一字符,直到碰到文件结束为止从文件重复地读一字符,直到碰到文件结束为止 putchar(ch);printf(n);fclose(fp);例例9-2从键盘输入一行字符串,写入文件从键盘输入一行字符串,写入文件text2.txt中。并将该文件内容显示在屏幕上。中。并将该文件内容显示在屏幕上。n程序运行时,由于输

20、入要写入文件名程序运行时,由于输入要写入文件名“text2.txt”中如果没有指定路径,则中如果没有指定路径,则缺省路径是当前项目的路径。缺省路径是当前项目的路径。输入要写入文件名?输入要写入文件名?text2.txt输入一行字符串:输入一行字符串:I am a student.I am a student.n程序运行结果:程序运行结果:9.3.2 向文件读写字符串向文件读写字符串n函数函数fgets和和fputs:n一次性地可从文件读出或向文件写入一次性地可从文件读出或向文件写入一个字符串。一个字符串。9.3.2 向文件读写字符串向文件读写字符串1.读字符串函数读字符串函数fgets n函数

21、调用形式为:函数调用形式为:fgets(字符数组名,字符数组名,n,文件指针,文件指针);例如:例如:fgets(str,n,fp);从从fp所指的文件中读出所指的文件中读出n-1个字符,结尾加个字符,结尾加上上0,送入字符数组,送入字符数组str中。中。9.3.2 向文件读写字符串向文件读写字符串1.读字符串函数读字符串函数fgets n调用形式:调用形式:fgets(字符数组名,字符数组名,n,文件指针,文件指针);n说明:说明:(1)在读出)在读出n-1个字符之前,如遇到了换行符或个字符之前,如遇到了换行符或EOF(文件结束符),则读结束,但将所读的(文件结束符),则读结束,但将所读的n

22、也作为也作为字符读入。字符读入。(2)函数原型)函数原型 char*fgets(char*str,int n,FILE*fp)n返回结果:读成功时返回字符数组的首地址;返回结果:读成功时返回字符数组的首地址;n不成功时返回不成功时返回NULL。9.3.2 向文件读写字符串向文件读写字符串2.写字符串函数写字符串函数fputsn函数调用形式为:函数调用形式为:fputs(字符串,文件指针字符串,文件指针)n字符串可为:字符串可为:n字符串常量字符串常量n字符数组名字符数组名n字符型指针变量。字符型指针变量。n函数原型:函数原型:int fputs(char*str,File*fp)n返回值:返回

23、值:n写入成功时返回写入成功时返回0;n否则返回非否则返回非0值。值。9.3.2 向文件读写字符串向文件读写字符串2.写字符串函数写字符串函数fputs例如:例如:fputs(“abcd“,fp);把字符串把字符串“abcd”写入到写入到fp所指的文件中。所指的文件中。例例9-3从键盘读入从键盘读入n行信息写入行信息写入MyText.txt文件文件中。接着从该文件读取内容显示到屏幕。中。接着从该文件读取内容显示到屏幕。#define n 3void main()FILE*fp;int i;char ch,st80;if(fp=fopen(MyText.txt,wt+)=NULL)printf(

24、Cannot open file strike any key exit!);getch();exit(1);printf(请输入请输入%d行信息行信息:n,n);for(i=0;in;i+)gets(st);fputs(st,fp);/写入文件写入文件printf(n用用gets()函数读取文件内容,显示:函数读取文件内容,显示:n);rewind(fp);/把文件内部的位置指针移到文件首把文件内部的位置指针移到文件首 while(fgets(st,80,fp)!=NULL)puts(st);/显示读取的一行内容显示读取的一行内容printf(n用用getc()函数读取文件内容,显示:函数读

25、取文件内容,显示:n);rewind(fp);/把文件内部的位置指针移到文件首把文件内部的位置指针移到文件首while(ch=fgetc(fp)!=EOF)putchar(ch);printf(n);fclose(fp);9.3.3 以二进制方式向文件读写数据块以二进制方式向文件读写数据块n数据块的读写函数数据块的读写函数fread和和fwrite:以二进制:以二进制方式一次性地读写一组数据。方式一次性地读写一组数据。nfread:从文件读取一个数据块从文件读取一个数据块nfwrite:向文件写入一个数据块。:向文件写入一个数据块。n用二进制方式打开指定的文件。用二进制方式打开指定的文件。n数

26、据块的读写时数据块的读写时,以二进制形式以二进制形式:n写入时是直接将内存中的一组数据原封不动地写到写入时是直接将内存中的一组数据原封不动地写到磁盘上磁盘上n读入时是将文件中的若干字节内容读到内存中。读入时是将文件中的若干字节内容读到内存中。9.3.3 以二进制方式向文件读写数据块以二进制方式向文件读写数据块1.读数据块函数读数据块函数freadn函数函数fread调用的一般形式为:调用的一般形式为:fread(buffer,size,count,fp);nbuffer指针指针:输入数据块的内存首地址;输入数据块的内存首地址;nsize:要读的数据项大小(字节个数);:要读的数据项大小(字节个

27、数);ncount:要读数据项的个数;:要读数据项的个数;nfp:FILE类型指针。类型指针。2.写数据块函数写数据块函数fwriten函数函数fwrite调用的一般形式为:调用的一般形式为:fwrite(buffer,size,count,fp);nbuffer指针指针:输出数据块的内存首地址输出数据块的内存首地址nsize:要写的数据项大小(字节数)要写的数据项大小(字节数)ncount:要写数据项的个数:要写数据项的个数nfp:FILE类型指针类型指针9.3.3 以二进制方式向文件读写数据块以二进制方式向文件读写数据块n例例9-4用二进制读写方式,将存放在数组用二进制读写方式,将存放在数

28、组中的一组数据写到文件中,并从此文件中的一组数据写到文件中,并从此文件读取内容显示在屏幕上。读取内容显示在屏幕上。9.3.3 以二进制方式向文件读写数据块以二进制方式向文件读写数据块#include void main()FILE*fp;int x6=1,2,3,4,5,6,y6,i;fp=fopen(test.dat,wb+);/文件以可读写的二进制方式打开文件以可读写的二进制方式打开fwrite(x,sizeof(int),6,fp);rewind(fp);/文件指针移到文件首文件指针移到文件首fread(y,sizeof(int),6,fp);for(i=0;i6;i+)printf(%

29、d,yi);printf(n);fclose(fp);123456 FILE*fp;char*p1=“123456,*p2=“7890;fp=fopen(file1.txt,wb);fwrite(p1,6,1,fp);rewind(fp);fwrite(p2,4,1,fp);fclose(fp);file1.dat的内容为:的内容为:7890569.3.3 以二进制方式向文件读写数据块以二进制方式向文件读写数据块n例例9-5 从键盘输入一组学生信息,每个学生记从键盘输入一组学生信息,每个学生记录包括姓名录包括姓名(name)、学号、学号(number)、年龄、年龄(age)和家庭住址和家庭住址

30、(addr)。要求以二进制方式。要求以二进制方式写入文件写入文件stu_list.dat中;然后再读出这组学中;然后再读出这组学生信息并显示在屏幕上。生信息并显示在屏幕上。#include#define N 2struct STUDENT /定义结构体描述学生信息定义结构体描述学生信息 char name14;int num;int age;char addr20;boyaN,boybN,*qq;main()FILE*fp;char ch;int i;if(fp=fopen(stu_list.dat,w+)=NULL)/以二进制读写方式打开文件以二进制读写方式打开文件 printf(Canno

31、t open file,strike any key exit!);getch();exit(1);boya:存放从键盘输入的:存放从键盘输入的两个学生记录两个学生记录boyb:存放从输入文件读:存放从输入文件读入的两个学生记录入的两个学生记录qq指向指向boyb printf(input%d recordsnName Number Age Addressn,N);for(i=0;iN;i+)/从键盘输入从键盘输入N行记录放入数组行记录放入数组boya中中 scanf(%s%d%d%s,boyai.name,&boyai.num,&boyai.age,boyai.addr);/将数组将数组N个

32、记录写入文件中个记录写入文件中 fwrite(boya,sizeof(struct STUDENT),N,fp);rewind(fp);/文件指针移到文件首文件指针移到文件首qq=boyb;/qq指向数组指向数组boyb首地址首地址 /从文件读入从文件读入N个记录写入个记录写入qq指向的数组指向的数组boybfread(qq,sizeof(struct STUDENT),N,fp);printf(n%-14s%-8s%-8s%-20sn,name,number,age,addr);for(i=0;iname,qq-num,qq-age,qq-addr);fclose(fp);9.3.3 以二进

33、制方式向文件读写数据块以二进制方式向文件读写数据块例例9-5 程序运行结果:程序运行结果:9.3.4向文件格式化读写数据向文件格式化读写数据n函数函数fscanf、fprintf与与scanf、printf功能功能相似:都是格式化地读或写数据相似:都是格式化地读或写数据n但但fscanf和和fprintf的读写对象是磁盘文件。的读写对象是磁盘文件。n函数函数fscanf的一般调用格式为:的一般调用格式为:fscanf(文件指针,格式字符串,输入地址表文件指针,格式字符串,输入地址表);n函数函数fprintf的一般调用格式为:的一般调用格式为:fprintf(文件指针,格式字符串,输出数据表文

34、件指针,格式字符串,输出数据表);9.3.4向文件格式化读写数据向文件格式化读写数据例如:例如:fscanf(fp,%d%s,&i,str);从从fp指向的输入文件,按格式串指向的输入文件,按格式串“%d%s”读取读取一个整型数据送给变量一个整型数据送给变量i,读取一个字符串给,读取一个字符串给字符数组字符数组str。例如:例如:fprintf(fp,%d%c,j,ch);向向fp指向的输出文件,按格式串指向的输出文件,按格式串%d%c写入写入整型变量整型变量j的值和字符变量的值和字符变量ch的值。的值。9.3.4向文件格式化读写数据向文件格式化读写数据 例例9-6 从键盘输入一组学生信息,每

35、个学生从键盘输入一组学生信息,每个学生记录包括姓名记录包括姓名(name)、学号、学号(number)、年、年龄龄(age)和家庭住址和家庭住址(addr)。要求用。要求用fscanf和和fprintf函数完成写入文件函数完成写入文件stu_list.dat中;然中;然后再读出这组学生信息并显示在屏幕上。后再读出这组学生信息并显示在屏幕上。#include#define N 2struct STUDENT/定义结构体描述学生信息定义结构体描述学生信息 char name14;int num;int age;char addr20;boyaN,boybN;main()FILE*fp;char c

36、h;int i;if(fp=fopen(stu_list.dat,w+)=NULL)/以读写方式打开文件以读写方式打开文件printf(Cannot open file strike any key exit!);getch();exit(1);printf(input%d recordsnName Number Age Addressn,N);for(i=0;iN;i+)/从键盘输入从键盘输入N个学生记录放入数组个学生记录放入数组boya中中scanf(%s%d%d%s,boyai.name,&boyai.num,&boyai.age,boyai.addr);for(i=0;iN;i+)/将

37、数组中将数组中N个记录(元素)写入文件个记录(元素)写入文件 fprintf(fp,%s%d%d%sn,boyai.name,boyai.num,boyai.age,boyai.addr);rewind(fp);/文件指针移到文件首文件指针移到文件首for(i=0;iN;i+)/从文件读入从文件读入N个记录写入数组个记录写入数组boyb中中 fscanf(fp,%s%d%d%sn,boyai.name,&boyai.num,&boyai.age,boyai.addr);printf(n%-14s%-8s%-8s%-20sn,name,number,age,addr);for(i=0;iN;i+

38、)/打印数组打印数组boyb中中N个记录个记录printf(%-14s%-8d%-8d%-20sn,boyai.name,boyai.num,boyai.age,boyai.addr);fclose(fp);9.3.4向文件格式化读写数据向文件格式化读写数据 例例9-7 编写程序求自然数编写程序求自然数1-10的平方,的平方,将结果写入文本文件名为将结果写入文本文件名为square.txt中。中。然后在按顺序读出显示在屏幕上。然后在按顺序读出显示在屏幕上。main()FILE*fp;int a,aa;int i;if(fp=fopen(square.txt,w+)=NULL)printf(Ca

39、nnot open file strike any key exit!);getch();exit(1);for(i=1;i=10;i+)/向文件写入向文件写入10行数据行数据:i,i*ifprintf(fp,%d,%dn,i,i*i);rewind(fp);/文件指针移到文件首文件指针移到文件首for(i=1;i=10;i+)/从文件读入从文件读入10行数据显示行数据显示 fscanf(fp,%d,%dn,&a,&aa);printf(%d,%dn,a,aa);fclose(fp);1,22,410,1009.4文件的随机读写文件的随机读写n前面介绍的对文件的读写方式都是前面介绍的对文件的读

40、写方式都是顺序读写顺序读写,即读写文件只能从头开始,顺序读写各个数据。即读写文件只能从头开始,顺序读写各个数据。n 但在实际问题中但在实际问题中,经常需要只读写文件中某一经常需要只读写文件中某一指定的部分。指定的部分。n为了解决这个问题,可先移动文件内部的位置为了解决这个问题,可先移动文件内部的位置指针到需要读写的位置,再进行读写,这种读指针到需要读写的位置,再进行读写,这种读写称为写称为随机读写随机读写。n实现随机读写的关键是要按要求移动文件位置实现随机读写的关键是要按要求移动文件位置指针,这称为指针,这称为文件的定位文件的定位。9.4文件的随机读写文件的随机读写n文件内部位置指针的移动:文

41、件内部位置指针的移动:移动文件位置指针移动文件位置指针9.4.1文件的定位文件的定位n移动文件内部位置指针的函数主要有:移动文件内部位置指针的函数主要有:rewind和和fseek。1.rewind函数函数 n一般调用形式为:一般调用形式为:rewind(文件指针文件指针);n功能:把文件内部的位置指针移到文件首功能:把文件内部的位置指针移到文件首9.4.1文件的定位文件的定位2.fseek函数函数n调用形式为:调用形式为:fseek(fp,位移量,起始点,位移量,起始点);nfp:FILE类型指针类型指针;n位移量位移量:表示移动的字节数,为表示移动的字节数,为long型。型。n起始点起始点

42、:从何处开始计算位移量。:从何处开始计算位移量。9.4.1文件的定位文件的定位2.fseek函数函数例如:例如:fseek(fp,100L,0);把位置指针移到离文件首把位置指针移到离文件首100个字节处。个字节处。fseek(fp,100L,1);把位置指针移到离当前位置往后把位置指针移到离当前位置往后100个字节处。个字节处。fseek(fp,-10L,2);把位置指针移到离文件尾往前把位置指针移到离文件尾往前10个字节处。个字节处。9.4.1文件的定位文件的定位3.ftell函数函数n功能:返回文件内部位置指针的当前位置,用功能:返回文件内部位置指针的当前位置,用相对于文件首的字节位移量

43、表示。相对于文件首的字节位移量表示。n如果调用如果调用ftell函数出错(如函数出错(如fp指向的文指向的文件不存在),则返回为件不存在),则返回为-1L。例如:例如:long i=ftell(fp);if(i=-1L)printf(“error”);9.4.2随机的读写随机的读写n举例说明文件的随机读写方法。举例说明文件的随机读写方法。n例例9-8 程序从键盘输入程序从键盘输入N个学生记录,个学生记录,并写入文件并写入文件stu_list.dat中,从该文件中中,从该文件中读出第读出第2个、第个、第4个、个、(双号)的学生(双号)的学生的数据并显示。的数据并显示。#define N 4str

44、uct STUDENT/定义结构体描述学生信息定义结构体描述学生信息 char name14;int num;int age;char addr20;boysN,boy,*qq;void main()FILE*fp;char ch;int i;if(fp=fopen(stu_list.dat,rb+)=NULL)/以二进制读方式打开文以二进制读方式打开文件件printf(Cannot open file strike any key exit!);getch();exit(1);printf(input%d recordsnName Number Age Addressn,N);for(i=0

45、;iN;i+)/键盘输入键盘输入N行记录放入数组行记录放入数组boya中中 scanf(%s%d%d%s,boysi.name,&boysi.num,&boysi.age,boysi.addr);/将数组将数组N个记录写入文件中个记录写入文件中fwrite(boys,sizeof(struct STUDENT),N,fp);printf(n%-14s%-8s%-8s%-20sn,name,number,age,addr);for(i=1;iN;i=i+2)/将文件位置相对于文件首定位到第将文件位置相对于文件首定位到第i条记录条记录 fseek(fp,i*sizeof(struct STUDEN

46、T),SEEK_SET);fread(&boy,sizeof(struct STUDENT),1,fp);/读入当前位置的记录读入当前位置的记录 /显示显示boy中的记录中的记录 printf(%-14s%-8d%-8d%-20sn,boy.name,boy.num,boy.age,boy.addr);fclose(fp);n程序运行结果:程序运行结果:例例9-9 分析下面程序的运行结果分析下面程序的运行结果.#includemain()FILE*fp;int x6=1,2,3,4,5,6,i;fp=fopen(test.dat,wb+);fwrite(x,sizeof(int),3,fp);rewind(fp);fread(x+3,sizeof(int),3,fp);for(i=0;i6;i+)printf(%d,xi);printf(n);fclose(fp);123123向文件写入向文件写入x数组中数组中前前3个元素,即写入个元素,即写入1、2、3。向文件读取向文件读取3个个int型的数据型的数据1、2、3,放入地址为,放入地址为x+3的地址的地址中,即中,即x3=1,x4=2,x5=3.本章小结本章小结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究生考试


经营许可证编号:宁ICP备18001539号-1