【文档说明】C语言文件中数据的访问与存储课件.ppt,共(54)页,348.012 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7162.html
以下为本文档部分文字说明:
第6章文件中数据的访问与存储6.1文件的概念和分类6.2文件中数据的读写步骤6.3文本文件中数据的读写操作P1916.1文件的概念和分类P192文件是存储在外部介质上数据的集合。存储在磁盘上的文件称为磁盘文件。返回6.1文件的概念和分类P192如果要访问文件中的数据或向文件中存储数据
,都要以文件名为标识。仅介绍文本文件中数据的读写方法。返回6.2文件中数据的读写步骤P192(1)打开文件无论对文件进行读还是写操作,都需要先打开文件,打开文件用fopen函数。(2)读写文件写就是将内存中的数据存到文件中去。主要介绍fs
canf和fprintf函数。(3)关闭文件当文件不再使用时,需将其关闭。关闭文件用fclose函数。返回6.3.1向文本文件中写数据6.3.2从已有的文本文件中读数据6.3.3文本文件中对数据的读写操作6.3文本文件中数据
的读写操作P192返回6.3.1向文本文件中写数据P192永久性地存放数据,如存储测量数据结果、学生成绩存档等,在C语言中用文件。可以用fprintf函数向文本文件中写数据。问题的提出【实例6-1】改写实例1-1。编写程序,将如图1.2所示的
问候语写到d盘下c文件夹中的“f1.txt”文件中。任务与分析6.3.1向文本文件中写数据P192操作步骤#include<stdio.h>main(){定义文件指针fp打开(或建立)d盘c文件夹中的“f1.txt”文件将问候语写入“f1.txt”文件关闭文件}FILE*fp;fp=f
open("d:\\c\\f1.txt","w");fprintf(fp,"<-CProgramming->\n");fprintf(fp,"<>\n");fprintf(fp,"<Howdoyoudo?>\n");fprintf(fp,"<>\n");fprintf(fp,
"<Nicetomeetyou!>\n");fprintf(fp,"<>\n");fprintf(fp,"<---Goodluck!--->\n");fclose(fp);【实例6-2】编写程序,用人机对话的形式随机产生3道
100以内加法题,并将题目和用户输入的答案写到d盘c文件夹中的“f2.txt”文件中。P194操作步骤#include<stdio.h>#include<time.h>#include<stdlib.h>main(
){定义整型变量a、b、c和i定义文件指针fpinta,b,c,i;FILE*fp;操作步骤打开d盘c文件夹中的“f2.txt”文件随机产生三个题目fp=fopen("d:\\c\\f2.txt","w
");if(fp==NULL){printf("Cannotopenthefile.\n");exit(0);}srand(time(0));for(i=1;i<=3;i++){a=rand()%100;b=rand
()%100;文件打开失败操作步骤等待键盘输入答案将题目和答案存入“f2.txt”文件关闭文件}fprintf(fp,"(%d)%d+%d=%d\n",i,a,b,c);}fclose(fp);printf("第%d题:%d+%d=",i,a,b);scanf("%d"
,&c);形式接近【实例6-3】编写程序,将英汉对照表写到当前文件夹中的“f3.txt”文件中。P195操作步骤#include<stdio.h>#include<stdlib.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};m
ain(){定义名为list的结构体类型数组a并初始化定义循环变量i定义文件指针fp打开当前文件夹中的“f3.txt”文件将结构体数组a中的数据写入“f3.txt”文件关闭文件}charcn[10];charen[10];既清
晰又易读取操作步骤#include<stdio.h>#include<stdlib.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};main(){定义名为list的结构体类型数组a并初始化定义循环变量i定义文件指针fp打开当前文件夹中的“f3.txt”文
件将结构体数组a中的数据写入“f3.txt”文件关闭文件}main(){structlista[5]={"中国","China","女孩","girl","男孩","boy","人","man","一","one"};inti;FILE*fp;fp=fopen("f
3.txt","w");if(fp==NULL){printf("Cannotopenthefile.\n");exit(0);}for(i=0;i<5;i++)fprintf(fp,"%15s%15s\n",a[i],a[i].en);fclose(fp);}相对路径最好提供宽度【实例
6-4】编写程序,向已有的英汉对照表(实例6-3中建立的文件“f3.txt”)最后,添加新的单词。P197操作步骤#include<stdlib.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};main(){定义名为list的结构体类型变
量w定义文件指针fp打开当前文件夹中的“f3.txt”文件输入要添加的单词将添加的单词写入“f3.txt”文件关闭文件}charcn[10];charen[10];structlistw;FILE*fp;gets(w);gets(w.en);fprintf(fp,"%15s%15s
\n",w,w.en);fp=fopen("f3.txt","a");if(fp==NULL){……}fclose(fp);打开文件的一般形式:文件指针名=fopen("文件名","打开方式");归纳分析打开方式功能文本二进制"r""rb"仅为读打开已有文件"w""wb"仅为写打开"a""ab"
为追加打开判断文件打开是否成功:if(文件指针名==NULL){printf("Cannotopenthefile.\n");exit(0);}归纳分析关闭文件的一般形式:fclose(文件指针);fprintf函数的一般形式:fprintf(文件
指针名,"一串字符");或fprintf(文件指针名,"格式控制字符串",输出项表);归纳分析动手练习6-1编写程序,从键盘输入3个学生的信息(包括学号,姓名,性别,成绩),并存入d盘c文件夹中的“stu.txt”文件中。P20
0编写程序,向练习6-1中已建立的“stu.txt”文件中添加2个新的学生信息,信息从键盘输入。6-26.3.2从已有的文本文件中读数据P200在日常生活中经常需要访问已有文件中的数据做相应处理,如分析测量数据、统计
学生成绩等。在C语言中可以用fscanf函数从文本文件中读取数据。问题的提出【实例6-5】编写程序,从实例6-2建立的文件“f2.txt”中读取所有题目和答案,并显示在屏幕上。任务与分析6.3.2从已有的文本文件中读数据P200操作步骤#include<stdio.h>#inc
lude<stdlib.h>main(){定义整型变量a、b、c、k和i定义文件指针fp打开d盘c文件夹中的“f2.txt”文件从“f2.txt”文件中读取题目和答案将题目和答案显示在屏幕上关闭文件}in
ta,b,c,k,i;FILE*fp;if(fp==NULL){……}fp=fopen("d:\\c\\f2.txt","r");for(i=1;i<=3;i++){fscanf(fp,"(%d)%d+%d=%d\n",&k,&a,&b,&c);printf("--
-%d---%d+%d=%d\n",k,a,b,c);}fclose(fp);【实例6-6】编写程序,从实例6-3建立的文件“f3.txt”中读取所有内容,并显示在屏幕上。P201操作步骤#include<stdio.h>
#include<stdlib.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};charcn[10];charen[10];操作步骤main(){定义循环变量i定义名为list的结构体类型变量w定义文件指针fp打开d盘c文件夹中的“f3.txt”文件从“f3.txt”
文件中读取单词将单词显示在屏幕上关闭文件}inti;structlistw;FILE*fp;if(fp==NULL){……}fp=fopen("d:\\c\\f3.txt","r");for(i=1;i<=5;i++){fscan
f(fp,"%15s%15s\n",w,w.en);printf("%15s%15s\n",w,w.en);}fclose(fp);对于长度不定的文件while(feof(fp)==0)【实例6-7】编写程序,输入英文或中文单词,根据
英汉对照表文件“f3.txt”,在屏幕上显示对应的单词。P203操作步骤#include<stdio.h>#include<stdlib.h>#include<string.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};charcn[10
];charen[10];操作步骤main(){定义名为list的结构体类型变量w定义文件指针fp定义标志变量s.flag定义字符串变量str打开d盘c文件夹中的“f3.txt”文件structlistw;FIL
E*fp;ints,flag=0;charstr[20];fp=fopen("d:\\c\\f3.txt","r");if(fp==NULL){printf("Cannotopenthefile.\n");exit(0);}操作步骤
选择是英汉还是汉英?输入待查找的单词printf("请选择:\n英汉---1\n汉英---2\n");scanf("%d",&s);if(s==1){printf("请输入要查找的英文单词:\n");scanf("%s",str);}elseif
(s==2){printf("请输入要查找的中文:\n");scanf("%s",str);}操作步骤在“f3.txt”文件中查找对应单词输出查找结果while(feof(fp)==0){fscanf
(fp,"%15s%15s\n",w,w.en);if(s==1&&strcmp(str,w.en)==0){flag=1;printf("%s:%s\n",w.en,w);break;}if(s==2&
&strcmp(str,w)==0){flag=1;printf("%s:%s\n",w,w.en);break;}}if(flag==0)printf("没有查找到对应的单词");操作步骤关闭文件}fclose(fp);}【实例6-8】用Windows中的记事本建立2个文件“
f4.txt”和“f5.txt”,并编写程序,将文件“f5.txt”中的数据合并到“f4.txt”文件中。P205操作步骤用记事本在d盘c文件夹下建立文件“f4.txt”和“f5.txt”,文件中存放汉英对照
表。操作步骤#include<stdio.h>#include<stdlib.h>structlist{定义存放中文单词的成员定义存放英文单词的成员};charcn[10];charen[10];操作步骤main(){定义名为l
ist的结构体类型变量w定义文件指针fp1,fp2打开d盘c文件夹中的“f4.txt”文件打开d盘c文件夹中的“f5.txt”文件structlistw;FILE*fp1,*fp2;fp1=fopen("d:\\c
\\f4.txt","a");if(fp1==NULL){printf("Cannotopenthefile.\n");exit(0);}fp2=fopen("d:\\c\\f5.txt","r");if(fp2==NULL){printf("Cannotopenthefile
.\n");exit(0);}操作步骤从“f5.txt”文件中读取数据将数据追加到“f4.txt”文件关闭两个文件}while(feof(fp2)==0){fscanf(fp2,"%10s%15s\n",w,w.en);fprintf(fp
1,"%10s%15s\n",w,w.en);}fclose(fp1);fclose(fp2);fscanf函数的一般形式:fscanf(文件指针名,"格式控制字符串",输入项表);归纳分析读取文件中所有数据:while(feof(文件指针)==0){读数据}动
手练习6-3编写程序,输入学号,从练习6-1已建立的“stu.txt”文件中查找对应的学生(若“stu.txt”文件不存在,先建立),并输出该学生的全部信息(包括学号,姓名,性别,成绩)。P207动手练习6-4P207用Windo
ws中的记事本建立1个文件“stu1.txt”,文件中存储新入学的学生信息,与“stu.txt”文件格式一致。编写程序,将文件“stu1.txt”中的数据合并到“stu.txt”中。6.3.3文本文件中对数据的读写操作P207在日常生活中经常需要读取已有文件中的
数据进行处理,然后再存入文件中。如对学生成绩排序、考试系统等。在C语言中,需要综合运用函数fscanf、fprintf以及feof等。问题的提出【实例6-9】编写程序,从实例6-2建立的文件“f2.txt”中修改第1题的错误答案。任务与分析6.3.3文本文件中对数据的读写操作P207操
作步骤#include<stdio.h>#include<stdlib.h>main(){定义整型数组a、b、c、k定义循环控制变量i、j定义文件指针fp打开d盘c文件夹中的“f2.txt”文件inta[50],b[50],c[50],k[50
],i,j;FILE*fp;fp=fopen("d:\\c\\f2.txt","r");if(fp==NULL){printf("Cannotopenthefile.\n");exit(0);}操作步骤从“f2.txt”文件中读取数据到数组a、b
、c、k中关闭文件修改第1题答案i=0;while(feof(fp)==0){fscanf(fp,"(%d)%d+%d=%d\n",&k[i],&a[i],&b[i],&c[i]);i++;}fclose(fp);printf("--%d---%d+%d=\n",k[0],a[0],b[0]);
printf("请输入正确答案:");scanf("%d",&c[0]);操作步骤重新打开“f2.txt”文件将修改后的新数据写入该文件关闭文件}fp=fopen("d:\\c\\f2.txt","w");
if(fp==NULL){printf("Cannotopenthefile.\n");exit(0);}for(j=0;j<i;j++)fprintf(fp,"(%d)%d+%d=%d\n",k[j],a[j],b
[j],c[j]);printf("修改完毕\n");fclose(fp)0)【实例6-10】编写程序,将已建立好的文件“f2.txt”中数据全部复制到新文件“f2_new.txt”中。P209操作步骤#include
<stdio.h>#include<stdlib.h>main(){定义整型变量a、b、c、k定义文件指针fp1、fp2打开d盘c文件夹中“f2.txt”、“f2_new.txt”从“f2.txt”文件中读取数据将数据写入“f2_new.txt”文件中关闭文件}操作步骤#include
<stdio.h>#include<stdlib.h>main(){inta,b,c,k;FILE*fp1,*fp2;fp1=fopen("d:\\c\\f2.txt","r");if(fp1==NULL){printf("Cannotopenthefi
le.\n");exit(0);}操作步骤fp2=fopen("d:\\c\\f2_new.txt","w");if(fp2==NULL){printf("Cannotopenthefile.\n");exit(0);}操作步骤while(feof(fp1)==0){fscanf(fp
1,"(%d)%d+%d=%d\n",&k,&a,&b,&c);fprintf(fp2,"(%d)%d+%d=%d\n",k,a,b,c);}fclose(fp1);fclose(fp2);}修改时先以“r”方式打开文件,按顺序读出数据存到临时变量中
,处理完后再以“w”方式打开文件,将变量中的数据写到文件中。归纳分析每个文件只有一种使用方式,如只读或只写,这种情况下可以设置多个文件指针分别指向各文件。动手练习6-5编写程序,将练习6-1已建立的“stu.txt”文件中(若“stu.txt”文件不存在,
先建立)学生姓名“王民”改为“王明”。P210动手练习6-6编写程序,从练习6-1已建立的“stu.txt”文件中(若“stu.txt”文件不存在,先建立)成绩优秀(成绩≥85)的学生信息存入新文件“stu_new.txt”中。P210