1、大连理工大学出版社C语言程序设计案例教程 C语言程序设计案例教程 大连理工大学出版社v教学目的:教学目的:通过本项目的学习,要求能理解文本文件和二进制文件通过本项目的学习,要求能理解文本文件和二进制文件的概念,能熟练使用文件的读写函数对文件进行一系列的操的概念,能熟练使用文件的读写函数对文件进行一系列的操作,理解文件的定位和文件的出错检测等,能够利用本项目作,理解文件的定位和文件的出错检测等,能够利用本项目的知识点进行一些简单的课程设计,为后续课程中系统的开的知识点进行一些简单的课程设计,为后续课程中系统的开发奠定基础。发奠定基础。项目八 学生成绩文件管理学生成绩文件管理 C语言程序设计案例教
2、程 大连理工大学出版社项目八 学生成绩文件管理学生成绩文件管理v本章内容本章内容 文件操作的文件操作的C C程序引例程序引例文件的打开与关闭文件的打开与关闭文件的读写文件的读写字符串读写函数字符串读写函数格式化读写函数格式化读写函数其他读写函数其他读写函数字符读写函数字符读写函数数据读写函数数据读写函数 C语言程序设计案例教程 大连理工大学出版社文件的定位文件的定位文件头定位函数文件头定位函数文件随即定位函数文件随即定位函数流失文件的定位函数流失文件的定位函数判断文件结束函数判断文件结束函数feoffeof文件的出错检测:文件的出错检测:ferrorferror和和clearerrcleare
3、rr综合实训综合实训项目八 学生成绩文件管理学生成绩文件管理 C语言程序设计案例教程 大连理工大学出版社项目八 学生成绩文件管理学生成绩文件管理v重点和重点和难点难点重点:重点:()文件的打开与关闭()文件的打开与关闭(2 2)文件的读写)文件的读写(3 3)文件的定位)文件的定位(4 4)文件的出错检测)文件的出错检测难点难点 :、文件的读写、文件的读写、文件的出错检测、文件的出错检测 C语言程序设计案例教程 大连理工大学出版社任务一 将学生成绩顺序读写到文件中辅导员张老师在使用小王设计的程序时,需要完成如辅导员张老师在使用小王设计的程序时,需要完成如下的工作:将一个班级学生的期末考试信息下
4、的工作:将一个班级学生的期末考试信息(学号、姓名、学号、姓名、总分总分)存入磁盘文件存入磁盘文件stu.txtstu.txt中,同时统计总分在中,同时统计总分在550550分以上分以上的优秀学生信息,并将优秀学生的名单输出到屏幕上,以的优秀学生信息,并将优秀学生的名单输出到屏幕上,以前数据都是放在程序中,程序退出数据也消失,数据只能前数据都是放在程序中,程序退出数据也消失,数据只能保存在内存中,不能长期保存,本任务使用外部存储文件保存在内存中,不能长期保存,本任务使用外部存储文件来保存数据,实现对数据的存储和读取,能安全有效的长来保存数据,实现对数据的存储和读取,能安全有效的长期保存数据,还能
5、提供数据共享。完善了原来的程序,帮期保存数据,还能提供数据共享。完善了原来的程序,帮助张老师解决了该助张老师解决了该问题问题。C语言程序设计案例教程 大连理工大学出版社任务一 将学生成绩顺序读写到文件中文件操作引例:【例8.1】编写程序完成:将一个班级学生的期末考试信息(学号、姓名、总分)存入磁盘文件stu.txt中,同时统计总分在550分以上的优秀学生信息,并将优秀学生的名单输出到屏幕上。C语言程序设计案例教程 大连理工大学出版社假设班级目前的学生数为30,则程序代码如下:/*源文件名:Li8_1.c功能:统计一个班级的期末考试信息。*/#include#define N 30/*定义班级中
6、学生的人数*/void main()int i;FILE*fp;FILE*fpp;struct stu char name20;int number;任务一 将学生成绩顺序读写到文件中 C语言程序设计案例教程 大连理工大学出版社int score;studN/*打开或建立stu.txt文件,只允许写入数据*/fp=fopen(stu.txt,w);for(i=0;iN;i+)printf(请输入第%d个学生的信息:n,i+1);printf(姓名:);scanf(%s,studi.name);printf(学号:);scanf(%d,&studi.number);printf(总分:);sca
7、nf(%d,&studi.score);fprintf(fp,%s,%d,%dn,studi.name,studi.number,studi.score);任务一 将学生成绩顺序读写到文件中 C语言程序设计案例教程 大连理工大学出版社 fclose(fp);/*关闭stu.txt文件*/*打开已有的stu.txt文件,只允许读取数据*/fpp=fopen(stu.txt,r);for(i=0;i550.0)printf(%s(学号:%d)是个优秀的学.n,studi.name,studi.number);fclose(fpp);/*关闭stu.txt文件*/getch();任务一 将学生成绩顺
8、序读写到文件中 C语言程序设计案例教程 大连理工大学出版社程序首先将程序首先将3030个学生的信息存放到文件个学生的信息存放到文件stu.txtstu.txt中,然后中,然后对存放在对存放在stu.txtstu.txt中的学生的总分进行统计,并将总分在中的学生的总分进行统计,并将总分在550550分分以上的学生的名单输出。以上的学生的名单输出。以输入以输入5 5个个(假设此时假设此时N N的值为的值为5)5)学生的信息为例,程序的学生的信息为例,程序的运行情况为:运行情况为:任务一 将学生成绩顺序读写到文件中 C语言程序设计案例教程 大连理工大学出版社任务一 将学生成绩顺序读写到文件中 C语言
9、程序设计案例教程 大连理工大学出版社 此时如果打开文件此时如果打开文件stu.txt,则,则5个学生的信息清单按照个学生的信息清单按照输入的顺序存放在输入的顺序存放在stu.txt文件中,如图所示。文件中,如图所示。程序运行后程序运行后stu.txt文件的内容文件的内容任务一 将学生成绩顺序读写到文件中 C语言程序设计案例教程 大连理工大学出版社要完成上面的任务,小王必须要能够熟练使用文件的读写要完成上面的任务,小王必须要能够熟练使用文件的读写函数对文件进行一系列的操作,并要了解以下几个跟文件相关函数对文件进行一系列的操作,并要了解以下几个跟文件相关得概念:得概念:文件是一组相关数据的集合。在
10、文件是一组相关数据的集合。在C C程序设计中,按文件的程序设计中,按文件的内容可以分为两类:一类是程序文件,它是程序得源代码;另内容可以分为两类:一类是程序文件,它是程序得源代码;另一类是数据文件,它是程序运行时需要的原始数据及输出的结一类是数据文件,它是程序运行时需要的原始数据及输出的结果。这两类文件都保存在磁盘上,随时可以使用。程序文件的果。这两类文件都保存在磁盘上,随时可以使用。程序文件的创建和使用已经在前面各章使用了,本项目主要介绍数据文件创建和使用已经在前面各章使用了,本项目主要介绍数据文件的创建和使用。的创建和使用。任务一 将学生成绩顺序读写到文件中 C语言程序设计案例教程 大连理
11、工大学出版社按数据得存储形式,数据文件可以分为文本文件和二进按数据得存储形式,数据文件可以分为文本文件和二进制文件两类。制文件两类。n文本文件:也称文本文件:也称ASCIIASCII文件,是一种字符流文件。文本文件,是一种字符流文件。文本文件的优点是可以直接阅读,而且文件的优点是可以直接阅读,而且ASCIIASCII码标准统一,使文码标准统一,使文件易于移植,其缺点是输入、输出都要进行转换,效率低。件易于移植,其缺点是输入、输出都要进行转换,效率低。n二进制文件:二进制文件中的数据是按其在内存中的存二进制文件:二进制文件中的数据是按其在内存中的存储形式存放的储形式存放的。任务一 将学生成绩顺序
12、读写到文件中 C语言程序设计案例教程 大连理工大学出版社n流:流是一个逻辑设备,具有诸多相同的行为。在流:流是一个逻辑设备,具有诸多相同的行为。在C语言语言中有两种性质的流:文字流和二进制。中有两种性质的流:文字流和二进制。n顺序文件:可以进行顺序存取的文件称为顺序文件。顺序文件:可以进行顺序存取的文件称为顺序文件。n随机文件:可以进行随机存取的文件称为随机文件。随机文件:可以进行随机存取的文件称为随机文件。nC语言支持的文件存取方式有两种:顺序存取和随机存取。语言支持的文件存取方式有两种:顺序存取和随机存取。随机存取也称直接存取。随机存取也称直接存取。任务一 将学生成绩顺序读写到文件中 C语
13、言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 由于文件的打开与关闭都是利用系统函数来实现的,因此,由于文件的打开与关闭都是利用系统函数来实现的,因此,在编写有关文件的程序时,应该在其中包含在编写有关文件的程序时,应该在其中包含“stdio.h”头文头文件。件。文件打开函数文件打开函数fopen用来打开一个文件,其调用的一般用来打开一个文件,其调用的一般形式为:形式为:文件指针名文件指针名=fopen(文件名,使用文件方式文件名,使用文件方式);其中:其中:“文件指针名文件指针名”必须是被说明为必须是被说明为FILE类型的指针变量;类型的指针变量;“文件名文件名”是被打开文件的
14、文件名;是被打开文件的文件名;C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1 文件的打开 文件名通常是文件变量或文件数组;文件名通常是文件变量或文件数组;“使用文件方式使用文件方式”是是指文件的类型和操作要求。文件的使用方式共有指文件的类型和操作要求。文件的使用方式共有12种,下表种,下表给出了文本文件的符号和意义。给出了文本文件的符号和意义。文本文件的符号及其含义文本文件的符号及其含义 C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1 文件的打开 二进制二进制文件的符号及其含义文件的符号及其含义 以上六种方式是针对以上六种方式是针
15、对“文本文件文本文件”类型的类型的,下表给,下表给出了出了另外六种文件的操作方式是针对另外六种文件的操作方式是针对“二进制文件二进制文件”类型的。类型的。C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1 文件的打开 可以看出,上面两个表的作用基本上是相同的,唯一的区可以看出,上面两个表的作用基本上是相同的,唯一的区别是下表增加了一个表示二进制的字符别是下表增加了一个表示二进制的字符“b”。其中,文件使。其中,文件使用方式由用方式由r、w、a、t、b和和+六个字符组成,各字符的含义六个字符组成,各字符的含义如表所示。如表所示。文件使用方式中的字符及其含义文件使用方式
16、中的字符及其含义 C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1文件的打开 对上表做以下补充说明:对上表做以下补充说明:1.程序中凡是用程序中凡是用“r”打开一个文件时,表明该文件必须打开一个文件时,表明该文件必须已经存在,且只能从该文件读出数据。已经存在,且只能从该文件读出数据。2用用“w”打开的文件也只能向该文件写入数据。若打开打开的文件也只能向该文件写入数据。若打开的文件不存在,则按照指定的文件名建立该文件,若打开的文的文件不存在,则按照指定的文件名建立该文件,若打开的文件已经存在,则将该文件删除,重建一个新文件。使用时要特件已经存在,则将该文件删除,重建
17、一个新文件。使用时要特别注意这一点。别注意这一点。3.如果要向一个已经存在的文件后面追加新的信息,那如果要向一个已经存在的文件后面追加新的信息,那只能用只能用“a”方式打开文件。但此时该文件必须是存在的,否则方式打开文件。但此时该文件必须是存在的,否则将会出错。将会出错。C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1 文件的打开 4在打开一个文件之前,应该定义文件型指针,以便接在打开一个文件之前,应该定义文件型指针,以便接收函数收函数fopen返回的地址。如果出错,返回的地址。如果出错,fopen将返回一个空将返回一个空指针指针NULL。在程序中可以用这一信息来
18、判别是否完成打开文。在程序中可以用这一信息来判别是否完成打开文件的工作,并做相应的处理。件的工作,并做相应的处理。例如:例如:if(fp=fopen(“file1”,”rb”)=NULL)printf(“n error on open file1”);getch();exit(1);C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.1 文件的打开 该程序段表示:如果返回的指针为空,则不能打开当前该程序段表示:如果返回的指针为空,则不能打开当前目录下的文件目录下的文件“file1”,同时给出错误提示信息,同时给出错误提示信息“error on open file1”。程
19、序中的。程序中的getch()函数的功能是从键盘输入函数的功能是从键盘输入一个字符,该字符不在屏幕上显示。其实一个字符,该字符不在屏幕上显示。其实getch()在这里的在这里的作用是停留等待,只有当用户从键盘敲任意键时,程序才继续作用是停留等待,只有当用户从键盘敲任意键时,程序才继续执行,我们可以利用这个等待时间来阅读出错提示,找到错误执行,我们可以利用这个等待时间来阅读出错提示,找到错误原因。当敲任意键后,执行语句原因。当敲任意键后,执行语句“exit(1);”,从而退出程序。,从而退出程序。C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 文件一旦使用完毕,应使用关闭文件
20、函数文件一旦使用完毕,应使用关闭文件函数fclose把文件把文件关闭,以避免文件数据丢失等情况的发生。关闭,以避免文件数据丢失等情况的发生。fclose函数调用的一般形式为:函数调用的一般形式为:fclose(FILE*fp);其中,参数其中,参数fp是文件型指针,通过是文件型指针,通过fopen()函数已经获得,函数已经获得,它指向某个打开的文件。例如它指向某个打开的文件。例如 :fclose(fp);C语言程序设计案例教程 大连理工大学出版社上述语句的含义是关闭上述语句的含义是关闭fp所指向的文件,同时自动释所指向的文件,同时自动释放分配给文件的内存缓冲区。当正常完成关闭文件的操作放分配给
21、文件的内存缓冲区。当正常完成关闭文件的操作时,时,fclose函数的返回值为函数的返回值为0,表示已正确关闭指定的文,表示已正确关闭指定的文件;如返回非件;如返回非0值则表示有错误发生。值则表示有错误发生。8.2 文件的打开与关闭 8.2.2文件的关闭 C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.2文件的关闭 【例8.2】文件的打开与关闭应用举例。/*源文件名:Li8_2.c功能:文件的打开与关闭。*/#includevoid main()FILE*fp;/*定义一个文件指针*/if(fp=fopen(C:STUDENTch01_01ch01_01.c,rb )
22、=NULL)printf(file can not open!n);exit(1);else printf(The file succeed open!n);fclose(fp);C语言程序设计案例教程 大连理工大学出版社8.2 文件的打开与关闭 8.2.2文件的关闭 说明:在书写时,要严格按照格式书写,例如:将路径写说明:在书写时,要严格按照格式书写,例如:将路径写成成“C:STUDENTch01_01ch01_01.c”C:STUDENTch01_01ch01_01.c”是不正确的,这一点是不正确的,这一点要特别注意。路径写成要特别注意。路径写成“C:STUDENTch01_01ch01_
23、01.c”C:STUDENTch01_01ch01_01.c”才是正确的,这里的才是正确的,这里的“”的含义是:第一个的含义是:第一个“”代表转义代表转义字符,第二个字符,第二个“”才是字符本身。才是字符本身。程序运行后,屏幕显示:程序运行后,屏幕显示:C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写文件的读写操作由文件读写函数完成,常用的读写函数文件的读写操作由文件读写函数完成,常用的读写函数有有fputcfputc、fgetcfgetc、freadfread、fwritefwrite、fputsfputs、fgetsfgets、fprintffprintf、fscanffsca
24、nf、putwputw、getwgetw等。等。1.读字符函数读字符函数fgetc函数函数读字符函数读字符函数fgetcfgetc函数函数:fgetcfgetc函数用来从指定的文件读入一个字符,该文件必须是读函数用来从指定的文件读入一个字符,该文件必须是读或写方式打开的。或写方式打开的。fgetcfgetc函数的调用格式如下:函数的调用格式如下:ch=fgetc(fp);ch=fgetc(fp);C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.1 字符读写函数其中其中fpfp为文件类型指针,为文件类型指针,chch为字符变量。为字符变量。fgetcfgetc函数函数返回的
25、字符赋给字符变量返回的字符赋给字符变量chch。如果在执行。如果在执行fgetcfgetc函数读字符时函数读字符时遇到文件结束符,则该函数返回一个结束标志遇到文件结束符,则该函数返回一个结束标志EOF(-1)EOF(-1)。如果。如果想从磁盘文件顺序读入字符并在屏幕上显示出来,可以用以下想从磁盘文件顺序读入字符并在屏幕上显示出来,可以用以下的程序段:的程序段:ch=fgetc(fpch=fgetc(fp););while(ch!=EOF)while(ch!=EOF)putchar(ch);putchar(ch);ch=fgetc(fp);ch=fgetc(fp);C语言程序设计案例教程 大连理
26、工大学出版社8.3 文件的读写 8.3.1 字符读写函数【例8.4】读入“C:”目录下的文件“boot.ini”,并在显示器上显示出来。/*源文件名:Li8_4.c功能:读取一个文件的内容并显示出来。*/#includevoid main()FILE*fp;/*定义一个文件指针*/char c;if(fp=fopen(C:boot.ini,rt)=NULL)printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(1);C语言程序设计案例教程 大连理工大学出版社c=fgetc(fp);/
27、*从文件中逐个读取字符*/while(c!=EOF)/*只要读出的字符没有到文件尾就把该字符显示在屏幕上*/putchar(c);c=fgetc(fp);printf(n);fclose(fp);8.3 文件的读写 8.3.1 字符读写函数程序运行后,屏幕显示程序运行后,屏幕显示:C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.1 字符读写函数【例8.5】从“C:STUDENTch01_01”目录下的文本文件“ch01_01.ncb”中读取前7个字符,并在显示器上显示出来。/*源文件名:Li8_5.c功能:读取一个文件的内容并显示出来。*/#includevoid mai
28、n()FILE*fp;/*定义一个文件指针*/char ch;int i;if(fp=fopen(C:STUDENTch01_01ch01_01.ncb,rt)=NULL)printf(file can not open,press any key to exit!n);C语言程序设计案例教程 大连理工大学出版社 getch();/*从键盘上任意输入一字符,结束程序*/exit(1);for(i=0;i7;i+)if(feof(fp)break;/*如果是文件尾,则退出循环*/ch=fgetc(fp);putchar(ch);printf(n);fclose(fp);8.3 文件的读写 8.3
29、.1 字符读写函数程序运行后,屏幕显示程序运行后,屏幕显示:C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.1 字符读写函数说明:可以用记事本打开说明:可以用记事本打开“ch01_01.ncb”ch01_01.ncb”文件,如图所示。文件,如图所示。ch01_01.ncb的文件内容的文件内容 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.1 字符读写函数fputc函数用来将一个字符写入指定的文件中,该函数的函数用来将一个字符写入指定的文件中,该函数的调用格式为:调用格式为:fputc(ch,fp);其中其中ch可以是一个字符常量,也可以是一个字符变
30、量。可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。该函数的作用是将字符是文件指针变量。该函数的作用是将字符(ch的值的值)输出到输出到fp所指定的文件中去。所指定的文件中去。fputc函数也带回一个值,如果输出成功,函数也带回一个值,如果输出成功,则返回值就是输出的字符,如果输出失败,则返回则返回值就是输出的字符,如果输出失败,则返回EOF(-1)。2.写字符函数写字符函数fputc函数函数 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.1 字符读写函数【例8.6】编程实现:要求从键盘输入一行字符,将其写入到文件“ch01_01.c”该文件在“C:STU
31、DENTch01_01”目录下,然后把该文件的内容读出并在显示器上显示出来。/*源文件名:Li8_6.c功能:写一行字符到文件中,然后读取文件的内容并显示出来。*/#includevoid main()FILE*fp;/*定义一个文件指针*/char c;if(fp=fopen(C:STUDENTch01_01ch01_01.c,a+)=NULL)/*读取追加方式打开文本*/C语言程序设计案例教程 大连理工大学出版社 printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(1);pri
32、ntf(Please input a string:);c=getchar();/*从键盘读入一个字符后进入循环*/while(c!=n)/*判断读入的字符不是回车符时进入循环*/fputc(c,fp);/*将字符写入文件之中*/c=getchar();/*继续从键盘读入下一个字符*/8.3 文件的读写 8.3.1 字符读写函数 C语言程序设计案例教程 大连理工大学出版社 printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(1);printf(Please input a stri
33、ng:);c=getchar();/*从键盘读入一个字符后进入循环*/while(c!=n)/*判断读入的字符不是回车符时进入循环*/fputc(c,fp);/*将字符写入文件之中*/c=getchar();/*继续从键盘读入下一个字符*/8.3 文件的读写 8.3.1 字符读写函数程序运行后,屏幕显示程序运行后,屏幕显示:Please input a string:/*Program end*/C语言程序设计案例教程 大连理工大学出版社/*源文件名:Li1_1.c功能:在屏幕输出一串字符串*/#include void main()printf(This is a c program.n);
34、/*打印输出一行信息*/*Program end*/8.3 文件的读写 8.3.1 字符读写函数 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写1.写数据函数写数据函数fwrite函数函数 写数据块函数调用的一般形式为:写数据块函数调用的一般形式为:fwrite(buffer,size,n,fp);其中各个参数的含义及说明如表所示。其中各个参数的含义及说明如表所示。fwrite函数中各个参数的含义及说明函数中各个参数的含义及说明 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.2 数据读写函数【例8.7】从“从键盘上读取8个字符数据,写入D盘下的名为“123
35、.txt”(该文件的目录是d:123.txt)。文本文件中。/*源文件名:Li8_7.c 功能:从键盘读取8个字符数据,写入到文本文件中。*/#includevoid main()FILE*fp;/*定义一个文件指针*/char a8;char*p=a;if(fp=fopen(D:123.txt,wb)=NULL)printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/C语言程序设计案例教程 大连理工大学出版社 exit(1);while(pa+8)scanf(%c,p+);/*从键盘读入8个字
36、符存入数组a*/fwrite(a,sizeof(char),8,fp);/*将数组中的8个字符写入fp所指向的文件*/printf(n);fclose(fp);程序运行后,屏幕显示程序运行后,屏幕显示:8.3 文件的读写 8.3.2 数据读写函数 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.2 数据读写函数其中,其中,sizeof(char)是一个整型表达式,表示要求输入的数是一个整型表达式,表示要求输入的数必须为字符型,也可以用常量必须为字符型,也可以用常量1。类似的,处理单精度型数据可。类似的,处理单精度型数据可以用常量以用常量4,此时的表达式为,此时的表达式为s
37、izeof(float)。此时,此时,d:123.txt文件的内容如图所示。文件的内容如图所示。程序运行后程序运行后123.txt文件的内容文件的内容 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.2 数据读写函数读数据函数fread函数:读数据块函数调用的一般形式为:fread(buffer,size,n,fp);其中的buffer是一个字符型指针,表示存放读入数据的变量地址或数组首地址。size、n、fp的含义见上表。例如:fread(a,4,8,fp);上述语句的含义是从fp所指的文件中,每次读4个字节,也就是把一个实数送入实数数组a中,连续读8次,即读入8个实数
38、并送到数组a中。2.2.读数据函数读数据函数freadfread函数函数 C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.2 数据读写函数【例8.8】编程实现:从d:123.txt文件中读8个字符型数据,并把他们放到 字符数组a中。/*源文件名:Li8_8.c功能:从文件中读8个字符型数据,并存放到数组中,然后打印输出。*/#includevoid main()int i;FILE*fp;/*定义一个文件指针*/char a8;if(fp=fopen(D:123.txt,rb)=NULL)printf(file can not open,press any key to
39、exit!n);C语言程序设计案例教程 大连理工大学出版社 getch();/*从键盘上任意输入一字符,结束程序*/exit(1);if(fread(a,1,8,fp)!=8)/*判断是否读了8个字符数据*/if(feof(fp)printf(End of file!n);/*没有读完8个字符是文件结束*/else printf(Read error!n);/*读数错误*/fclose(fp);/*关闭文件*/for(i=0;i8;i+)/*输出数组a中的字符数据*/printf(%c,ai);printf(n);8.3 文件的读写 8.3.2 数据读写函数 C语言程序设计案例教程 大连理工大
40、学出版社程序运行后,屏幕显示程序运行后,屏幕显示:8.3 文件的读写 8.3.2 数据读写函数说明:当对文件进行读写操作时,首先将所读写的内容说明:当对文件进行读写操作时,首先将所读写的内容放进缓冲区,即写函数只对输出缓冲区进行操作,读函数只放进缓冲区,即写函数只对输出缓冲区进行操作,读函数只对输入缓冲区进行操作。例如向一个文件写入内容,所写的对输入缓冲区进行操作。例如向一个文件写入内容,所写的内容首先放在输出缓冲区中,直到输出缓冲区存满或使用内容首先放在输出缓冲区中,直到输出缓冲区存满或使用fclose()函数关闭文件时,缓冲区的内容才会写入文件中。函数关闭文件时,缓冲区的内容才会写入文件中
41、。如果没有如果没有fclose()函数,则不会向文件中存入所写的内容或函数,则不会向文件中存入所写的内容或写入的文件内容不全。写入的文件内容不全。C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 字符串读写函数处理的文件类型主要是文本文件,分为读字符串读写函数处理的文件类型主要是文本文件,分为读字符串函数和写字符串函数字符串函数和写字符串函数。1.写字符串函数写字符串函数fputs fputs函数的功能是向指定的文件写入一个字符串,其调函数的功能是向指定的文件写入一个字符串,其调用形式为:用形式为:fputs(字符串字符串,文件指针文件指针);C语言程序设计案例教程 大连理工大学出
42、版社8.3 文件的读写 8.3.3 字符串读写函数字符串可以是字符串常量,也可以是字符数组名或指针变字符串可以是字符串常量,也可以是字符数组名或指针变量,例如:量,例如:fputs(Human,fp);fputs(Human,fp);上述语句的含义是把字符串上述语句的含义是把字符串“Human”Human”写入写入fpfp所指的文件所指的文件之中。之中。2.2.读字符串函数读字符串函数fgetsfgetsfgetsfgets函数的功能是从指定的文件中读一个字符串到字函数的功能是从指定的文件中读一个字符串到字符数组中,其调用形式为:符数组中,其调用形式为:fgets(str,n,fp);fget
43、s(str,n,fp);C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.3 字符串读写函数 函数中的参数函数中的参数strstr是字符数组名;是字符数组名;n n是一个正整数,表示从是一个正整数,表示从文件中读出的字符串不超过文件中读出的字符串不超过n-1n-1个字符。在向字符数组读入的最个字符。在向字符数组读入的最后一个字符后加上字符串结束标志后一个字符后加上字符串结束标志00。如果在读。如果在读n-1n-1个字符之个字符之前遇到换行符或前遇到换行符或EOFEOF,读入工作结束。例如:,读入工作结束。例如:fgets(ch,50,fp);fgets(ch,50,fp);
44、上述语句的含义是从上述语句的含义是从fpfp所指的文件中读出所指的文件中读出4949个字符送入字个字符送入字符数组符数组chch中。中。C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.3 字符串读写函数【例8.9】编程实现:从d:123.txt文件中读8个字符型数据,输出这8个字符组成的字符串。/*源文件名:Li8_9.c功能:从文件中读8个字符型数据,并打印输出这8个字符组成的字符串。*/#includevoid main()int i;FILE*fp;/*定义一个文件指针*/char a9;if(fp=fopen(D:123.txt,rt)=NULL)printf(f
45、ile can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/C语言程序设计案例教程 大连理工大学出版社 exit(1);fgets(a,9,fp);/*从fp所指的文件中读取9-1个字符送到数组a中*/printf(%sn,a);fclose(fp);/*关闭文件*/for(i=0;i8;i+)/*输出数组a中的字符数据*/printf(%c,ai);printf(n);8.3 文件的读写 8.3.3 字符串读写函数 程序运行后,屏幕显示:程序运行后,屏幕显示:C语言程序设计案例教程 大连理工大学出版社8.3 文件
46、的读写 文件的格式化读写函数和以前学习的格式化输入文件的格式化读写函数和以前学习的格式化输入/输出函输出函数很类似,对于格式化输入数很类似,对于格式化输入/输出函数,只能和标准输入输出函数,只能和标准输入/输出输出设备文件打交道;而有了格式化的读写函数之后,不但可以处设备文件打交道;而有了格式化的读写函数之后,不但可以处理标准设备的输入理标准设备的输入/输出输出,而且可以处理磁盘文件中的数据。而且可以处理磁盘文件中的数据。C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.4 格式化读写函数 格式化读函数格式化读函数fscanf的调用格式为:的调用格式为:fscanf(文件指
47、针文件指针,格式字符串格式字符串,输入列表输入列表);例如:例如:fscanf(fp,%d%s,&i,str);若此时若此时fp所指的文件中存放着以下的数据:所指的文件中存放着以下的数据:6happynewyear上 述 语 句 的 作 用 是 将上 述 语 句 的 作 用 是 将 6 赋 给 整 型 变 量赋 给 整 型 变 量 i,将,将 “happynewyear”赋给字符型数组赋给字符型数组str。2.2.格式化读函数格式化读函数fscanf fscanf C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.4 格式化读写函数 格式化写函数格式化写函数fprintff
48、printf的调用格式为:的调用格式为:fprintf(fprintf(文件指针文件指针,格式字符串格式字符串,输出列表输出列表););例如:例如:fprintf(fp,%d%c,j,ch);fprintf(fp,%d%c,j,ch);上述语句的作用是将整型变量上述语句的作用是将整型变量j j和字符型变量和字符型变量chch的值按的值按%d%d和和%c%c的格式输出到的格式输出到fpfp所指的文件上。所指的文件上。1.1.格式化写函数格式化写函数fprintf fprintf C语言程序设计案例教程 大连理工大学出版社8.3 文件的读写 8.3.4 格式化读写函数【例8.10】编程实现:从d:
49、234.txt文件中读取数据,并将读出的结果显示在屏幕上。/*源文件名:Li8_8.c功能:从文件中读取数据,并将读出的结果显示在屏幕上。*/#includevoid main()int i;FILE*fp;/*定义一个文件指针*/char a10;if(fp=fopen(D:234.txt,r)=NULL)printf(file can not open,press any key to exit!n);getch();/*从键盘上任意输入一字符,结束程序*/exit(1);C语言程序设计案例教程 大连理工大学出版社fgets(a,8,fp);/*从fp所指的文件中读取8-1个字符送到数组a
50、中*/printf(%s,a);/*输出所读的字符串*/fscanf(fp,%d,&i);/*读取整型数*/printf(%d,i);putchar(fgetc(fp);/*读取一个字符同时输出*/fgets(a,6,fp);/*读取5个字符*/puts(a);/*输出所读字符串*/fclose(fp);/*关闭文件*/getch();/*等待任一键*/假设假设234.txt文件中存放的内容是:文件中存放的内容是:happyne6yeareveryone,程序运行后,屏幕显示:程序运行后,屏幕显示:8.3 文件的读写 8.3.4 格式化读写函数 C语言程序设计案例教程 大连理工大学出版社8.3