第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂

2025-12-29
| 33页
| 99人阅读
| 1人下载
精品

内容正文:

9.3节:文件的读、写函数 编程语言基础——C语言 同步精品课堂 高教版(第5版) 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学目标 一 03 掌握fread和fwrite函数的功能与格式,能够完成结构体等复杂数据的二进制读写操作 理解fprintf和fscanf函数的格式化特性,能够灵活运用这些函数完成数据的格式化读写任务 04 掌握fgets和fputs函数的特点与参数设置,能够实现字符串的批量读写,正确处理文件中的字符串数据 02 理解fputc和fgetc函数的功能与用法,能够完成字符的逐个读写操作,解决字符复制等基础文件操作问题 01 教学重难点 二 03 格式化读写函数fprintf和fscanf的格式控制字符串设计,以及与标准输入输出函数的区别 不同读写函数的选择与组合使用,理解字符、字符串、二进制数据、格式化数据等不同读写方式的适用场景 04 二进制读写函数fread和fwrite的应用,理解结构体数据的二进制存储方式 02 各文件读写函数的参数格式与返回值含义,特别是fgets函数的缓冲区大小设置问题 01 导入新课 三 C语言"记忆大师"挑战赛 假设你是C语言程序员,现在需要完成以下任务 记录全班50人的期末考试成绩(数据量大) 下次开机后还能查看这些成绩(持久化存储) 能快速找到某位同学的成绩(随机访问) 能把成绩发给老师(数据交换) 问题思考 只用变量和数组能做到吗?为什么需要“文件操作”这个“记忆大师”? 今天我们将学习C语言的四种‘记忆术’: 字符读写(fputc/fgetc) 字符串读写(fgets/fputs) 二进制读写(fread/fwrite) 格式化读写(fprintf/fscanf) 新知讲授 四 文件的读、写功能是程序与外界进行数据持久化交换的核心。本讲将系统学习C语言中用于操作文件的四组核心输入/输出函数,它们分别针对字符、字符串、二进制数据块和格式化数据进行操作,是完成文件创建、写入、读取等任务的基础工具。通过掌握这些函数,我们将能够让程序有效地保存运行结果,并读取已存储的数据。 概述 新知讲授 四 知识点1:fputc函数和fgetc函数 1、fputc函数和fgetc函数 函数名 调用形式 功能 返回值 fgetc fgetc(fp) 从fp指向的文件读入一个字符 读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1) fputc fputc(ch,fp) 把字符ch写到文件指针变量fp所指向的文件中 输出成功,返回值就是输出的字符;输出失败,则返回EOF(即-1) 新知讲授 四 知识点1:fputc函数和fgetc函数 2、从键盘输入一些字符,并逐个将其送到磁盘上去,直到用户输入一个“#”为止。 #include <stdio.h> #include <stdlib.h> main() { FILE *fp; //定义文件指针fp char ch,filename[10]; printf("请输入所用的文件名: "); scanf("%s",filename); //输入文件名 getchar(); //用来消化最后输入的回车符 if((fp=fopen(filename,"w"))==NULL) //打开输出文件并使fp指向此文件 { printf("cannot open file "); //如果打开出错就输出“打不开” exit(0); } //终止程序 ① 新知讲授 四 知识点1:fputc函数和fgetc函数 2、从键盘输入一些字符,并逐个将其送到磁盘上去,直到用户输入一个“#”为止。 printf("请输入一个准备存储到磁盘的字符串(以#结束): "); ch=getchar(); //接收从键盘输入的第一个字符 while(ch!='#') //当输入′#′时结束循环 { fputc(ch,fp); //向磁盘文件输出一个字符 putchar(ch); //将输出的字符显示在屏幕上 ch=getchar(); //再接收从键盘输入的一个字符 } fclose(fp); //关闭文件 putchar(' '); //向屏幕输出一个换行符 } ② 新知讲授 四 知识点1:fputc函数和fgetc函数 3、将一个磁盘文件中的信息复制到另一个磁盘文件中。今要求将上例建立的file1.dat文件中的内容复制到另一个磁盘文件file2.dat中。 #include <stdio.h> #include <stdlib.h> main() { FILE *in,*out; //定义指向FILE类型文件的指针变量 char ch,infile[10],outfile[10]; //定义两个字符数组,分别存放两个数据文件名 printf("输入读入文件的名字:"); scanf("%s",infile); //输入一个输入文件的名字 printf("输入输出文件的名字:"); scanf("%s",outfile); //输入一个输出文件的名字 if((in=fopen(infile,"r"))==NULL) //打开输入文件 { printf("无法打开此文件 "); exit(0); } ① 新知讲授 四 知识点1:fputc函数和fgetc函数 3、将一个磁盘文件中的信息复制到另一个磁盘文件中。今要求将上例建立的file1.dat文件中的内容复制到另一个磁盘文件file2.dat中。 if((out=fopen(outfile,"w"))==NULL) //打开输出文件 { printf("无法打开此文件 "); exit(0); } ch=fgetc(in); //从输入文件读入一个字符,赋给变量ch while(!feof(in)) //如果未遇到输入文件的结束标志 { fputc(ch,out); //将ch写到输出文件 putchar(ch); //将ch显示到屏幕上 ch=fgetc(in); //再从输入文件读入一个字符,赋给变量ch } putchar('\0'); //显示完全部字符后换行 fclose(in); //关闭输入文件 fclose(out); //关闭输出文件 } ② 新知讲授 四 知识点2:fgets函数和fputs函数 1、认识fgets函数和fputs函数 函数名 调用形式 功能 返回值 fgets fgets(str,n,fp) 从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中 读成功,返回地址str,失败则返回NULL fputs fputs(str,fp) 把str所指向的字符串写到文件指针变量fp所指向的文件中 输出成功,返回0;否则返回非0值 新知讲授 四 知识点2:fgets函数和fputs函数 1、认识fgets函数和fputs函数 (1)fgets函数的函数原型为: (2)其作用是从文件读入一个字符串。调用时可以写成下面的形式: 其中,n是要求得到的字符个数,但实际上只从fp所指向的文件中读入n-1个字符,然后在最后加一个′\0′字符,这样得到的字符串共有n个字符,把它们放到字符数组str中。如果在读完n-1个字符之前遇到换行符“ ”或文件结束符EOF,读入即结束,但将所遇到的换行符“ ”也作为一个字符读入。若执行fgets函数成功,则返回值为str数组首元素的地址,如果一开始就遇到文件尾或读数据出错,则返回NULL。 char *fgets(char *str, int n, FILE *fp); fgets(str,n,fp); 新知讲授 四 知识点2:fgets函数和fputs函数 例题9-1:用fputs()函数将若干个字符串写入磁盘文件“fa.txt”中,再用fgets()函数读取若干个字符串。 # include <stdio.h> main( ) { FILE *fp; /* 定义一个文件指针 */ char a[20], b[20]="123456789abcdef"; fp = fopen ( "ff.txt", "w" ); /* 新建一个文件,磁盘文件名为fa.txt */ fputs ( b,fp); fputs ( "ABCD012345", fp ); fclose ( fp ); fp = fopen ( "ff.txt", "r" ); /*打开磁盘文件名为fa.txt*/ fgets(a,10,fp); puts(a); fgets(b,20,fp); puts(b); fclose ( fp ); } 新知讲授 四 知识点2:fgets函数和fputs函数 例题9-1:用fputs()函数将若干个字符串写入磁盘文件“fa.txt”中,再用fgets()函数读取若干个字符串。 文件名 C语句 文件中的内容存储 fa.txt fputs(b,fp); 1 2 3 4 5 6 7 8 9 a b c d e f fputs(“ABCD012345”,fp); 1 2 3 4 5 6 7 8 9 a b c d e f A B C 0 1 2 3 4 5 对文件中的内容进行输出 fgets(a,10,fp);puts(a); 123456789 fgets(b,20,fp);puts(b); abcdefABCD012345 新知讲授 四 知识点2:fgets函数和fputs函数 #include <stdio.h> #include <stdlib.h> main() { FILE*fp; char str[3][10]; int i=0; if((fp=fopen("D:\\123\\12.txt","r"))==NULL)//注意文件路径必须与前相同 { printf("can′t open file! "); exit(0); } while(fgets(str[i],10,fp)!=NULL) { printf("%s",str[i]); i++; } fclose(fp); } 例题:从文件string.dat中读回字符串,并在屏幕上显示。 新知讲授 四 知识点3:fread函数和fwrite函数 C语言允许用fread函数从文件中读一个数据块,用fwrite函数向文件写一个数据块。在读写时是以二进制形式进行的。在向磁盘写数据时,直接将内存中一组数据原封不动、不加转换地复制到磁盘文件上,在读入时也是将磁盘文件中若干字节的内容一批读入内存。 fread(buffer, size, count, fp); fwrite(buffer, size, count, fp); buffer: 是一个地址。对fread,它是用来存放从文件读入的数据的存储区的地址。对fwrite,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)。 size: 要读写的字节数。 count: 要读写多少个数据项(每个数据项长度为size)。 fp: FILE类型指针。 float f[10]; fread(f,4,10,fp); //从fp所指向的文件读入10个4个字节的数据,存储到数组f中 新知讲授 四 知识点3:fread函数和fwrite函数 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。(从磁盘文件stu_list中读入二进制数据,借助结构类型数组stud,输出到stu.dat文件中。) #include <stdio.h> #define SIZE 10 struct Student_type {char name[10]; int num; int age; char addr[15]; }stud[SIZE]; void load() { FILE *fp; int i; if((fp=fopen("stu_list","rb"))==NULL) //打开输入文件stu_list { printf("cannot open infile "); return; } for(i=0;i<SIZE;i++) if(fread(&stud[i],sizeof(struct Student_type),1,fp)!=1) //从stu_ list文件中读数据 { if(feof(fp)) { fclose(fp); return; } printf("file read error "); } fclose(fp); } ① ② 新知讲授 四 知识点3:fread函数和fwrite函数 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。(从磁盘文件stu_list中读入二进制数据,借助结构类型数组stud,输出到stu.dat文件中。) void save() //定义函数save,向文件输出SIZE个学生的数据 { FILE *fp; int i; if((fp=fopen("stu.dat","wb"))==NULL) //打开输出文件stu.dat { printf("cannot open file "); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1) printf("file write error "); fclose(fp); } ③ 文件“stu_list”中的二进制数据内容如下 新知讲授 四 知识点3:fread函数和fwrite函数 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。(从磁盘文件stu_list中读入二进制数据,借助结构类型数组stud,输出到stu.dat文件中。) main() { int i;FILE *fp; load(); save(); if((fp=fopen("stu.dat","rb"))==NULL) //打开输入文件stu.dat { printf("cannot open file "); return; } for(i=0;i<SIZE;i++) { fread(&stud[i],sizeof(struct Student_type),1,fp); //从fp指向的文件读入一组数据 printf("%-10s %4d %4d %-15s ",stud[i].name,stud[i].num,stud[i]. age,stud[i].addr);} //在屏幕上输出这组数据 fclose(fp); //关闭文件stu_list } ④ 新知讲授 四 知识点4:fprintf函数和fscanf函数 1、概念分析 可以对文件进行格式化输入输出,这时就要用fprintf函数和fscanf函数,从函数名可以看到,它们只是在printf和scanf的前面加了一个字母f。它们的作用与printf函数和scanf函数相仿,都是格式化读写函数。只有一点不同:fprintf和fscanf函数的读写对象不是终端而是文件。 新知讲授 四 知识点4:fprintf函数和fscanf函数 2、一般调用方式 fprintf(文件指针, 格式字符串, 输出表列); fprintf (fp,″%d,%6.2f″,i,f); //将int型变量i和float型变量f的值按%d和%6.2f的格式输出到fp指向的文件中 fscanf(文件指针, 格式字符串, 输入表列); fscanf (fp,″%d,%f″,&i,&f); //磁盘文件上如果有字符“3,4.5”,则从中读取整数3送给整型变量i,读取实数4.5送给float型变量f 新知讲授 四 知识点4:fprintf函数和fscanf函数 3、例题9-2:用fprintf()函数将2个浮点型数据写入磁盘文件“fb.dat”中,再将这2个浮点型数据从磁盘文件“fb.dat”中读出,并在屏幕上输出。 # include <stdio.h> main( ) { FILE *fp; float i=7.29, k; fp = fopen ("fb.dat", "wb" ); /* 新建一个二进制文件,磁盘文件名为fb.dat */ fprintf (fp, "%8.1f", i ); /* 将一个浮点型数据写入该文件 */ fprintf (fp, "%8.1f", 12.36 ); fclose ( fp ); /* 关闭文件 */ fp = fopen ("fb.dat", "rb" ); /* 打开一个二进制文件,磁盘文件名为fb.dat */ fscanf ( fp, "%f%f", &i, &k ); /* 从磁盘文件名为fb.dat中读2个浮点型数据 */ printf (" i=%f k=%f ", i , k ); fclose ( fp ); } 师生互动 五 【文件读写函数大挑战】——谁是C语言"文件操作王"? 第一关:字符读写专家 第二关:字符串处理大师 要从键盘输入字符并保存到文件,直到遇到'#'停止,你会使用: A. fgets + while循环 B. fgetc + fputc + while循环 C. fscanf + for循环 要把多个字符串写入文件并读回显示,最佳组合是: A. fputs写入 + fgets读取 B. fwrite写入 + fread读取 C. fprintf写入 + fscanf读取 第三关:二进制数据高手 第四关:格式化读写达人 要保存10个学生结构体数据到文件,应该用: A. fwrite一次写入整个数组 B. 用for循环逐个fputc写入 C. 用fprintf格式化写入 要保存2个浮点数并读回显示,正确方式是: A. fwrite写入 + fread读取 B. fprintf写入 + fscanf读取 C. fputs写入 + fgets读取 随堂练习 六 1.以下关于fputc函数的描述,错误的是( ) A. fputc函数用于向文件中写入一个字符 B. fputc函数的第一个参数是要写入的字符 C. fputc函数成功写入后返回EOF D. fputc函数的第二个参数是文件指针 答案:C 解析:​ fputc函数成功写入后返回写入的字符,失败时返回EOF。 随堂练习 六 2.使用fgetc函数读取文件时,当遇到文件结束标志时返回( ) A. NULL B. EOF C. '\0' D. -1 答案:B 解析:fgetc函数在遇到文件结束或读取错误时返回EOF。 随堂练习 六 3.以下关于fgets函数的描述,正确的是( ) A. fgets函数从文件中读取一行文本,包括换行符 B. fgets函数读取的字符串会自动添加'\0' C. fgets函数的第二个参数指定读取的最大字符数 D. 以上都正确 答案:D 解析: fgets函数会读取换行符,并在字符串末尾添加'\0',第二个参数限制读取的字符数。 随堂练习 六 4.以下关于fread函数的描述,错误的是( ) A. fread函数用于从文件中读取二进制数据 B. fread函数的第一个参数是存储数据的缓冲区地址 C. fread函数的第二个参数是每个数据项的大小 D. fread函数返回实际读取的字节数 答案:D 解析:fread函数返回实际读取的数据项个数,而不是字节数。 随堂练习 六 5.使用fwrite函数写入结构体数据时,第三个参数应该是( ) A. 结构体变量的地址 B. 结构体变量的大小 C. 1 D. 结构体成员的数量 答案:C 解析:​ fwrite函数的第三个参数是要写入的数据项个数,通常写入一个结构体时设为1。 随堂练习 六 6.以下关于fprintf函数的描述,正确的是( ) A. fprintf函数与printf函数用法完全相同 B. fprintf函数的第一个参数是格式字符串 C. fprintf函数的第一个参数是文件指针 D. fprintf函数只能用于文本文件 答案:C 解析: fprintf函数的第一个参数是文件指针,第二个参数是格式字符串。 随堂练习 六 7.以下代码片段的功能是( ) FILE *fp; char ch; fp = fopen("file.txt", "r"); while((ch = fgetc(fp)) != EOF) { putchar(ch); } fclose(fp); A. 将文件内容逐字符读取并显示在屏幕上 B. 将键盘输入写入文件 C. 复制文件内容到另一个文件 D. 统计文件中的字符数 答案:A 解析: 代码使用fgetc函数逐字符读取文件内容,并用putchar函数显示在屏幕上。 随堂练习 六 8.以下代码片段的功能是( ) FILE *fp; char str[100]; fp = fopen("file.txt", "r"); while(fgets(str, 100, fp) != NULL) { printf("%s", str); } fclose(fp); A. 逐行读取文件内容并显示在屏幕上 B. 逐字符读取文件内容并显示在屏幕上 C. 将键盘输入写入文件 D. 统计文件中的行数 答案:A 解析:代码使用fgets函数逐行读取文件内容,并用printf函数显示在屏幕上。 课堂小结 七 谢谢 EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.4软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn $

资源预览图

第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
1
第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
2
第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
3
第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
4
第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
5
第9章 第3节:文件的读、写函数(课件)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。