版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 u9.1 文件概述 u9.2 文件的基本操作u9.3 文件的其他操作 u9.4 文件应用程序举例 lC语言使用在程序和数据外部文件之间交换数据。l程序中的数据(如存储在数组、简单变量、结构体变量中的数据等)在写入磁盘文件之前,首先在“”暂存,当该缓冲区数据存满后,再输出到文件中。这一过程称为“”,是数据输出过程。l“写文件”的逆向操作是将文件中的数据装入内存,作为程序处理数据。这一过程称为“”,是数据输入过程。当从文件向内存输入数据时,首先把读入的数据输送到“”,然后再传送给程序。l使用缓冲区的文件读、写示意图使用缓冲区的文件读、写示意图 文件使用方式文件使用方式作作 用用r r以以“只读只
2、读”方式打开一个文本文件方式打开一个文本文件w w以以“只写只写”方式打开一个文本文件方式打开一个文本文件a a向文本文件尾增加数据向文本文件尾增加数据rbrb以以“只读只读”方式打开一个二进制文件方式打开一个二进制文件wbwb以以“只写只写”方式打开一个二进制文件方式打开一个二进制文件abab向二进制文件尾增加数据向二进制文件尾增加数据r+r+以以“读读/ /写写”方式打开一个文本文件方式打开一个文本文件w+w+以以“读读/ /写写”方式建立一个新的文本文件方式建立一个新的文本文件a+a+以以“读读/ /写写/ /追加追加”方式打开一个文本文件方式打开一个文本文件rb+rb+以以“读读/ /
3、写写”方式打开一个二进制文件方式打开一个二进制文件wb+wb+以以“读读/ /写写”方式建立一个新的二进制文件方式建立一个新的二进制文件ab+ab+以以“读读/ /写写/ /追加追加”方式打开一个二进制文件方式打开一个二进制文件 把从键盘输入的一个字符串写入到磁盘文件example.txt中#includeint main(void)char ch;FILE *fpfp=fopen(example.txt,w); printf(Enter a string: );while(ch=getchar()!=n) fputc(ch,fp); fclose(fp); return 0; 是测试文件结束
4、状态的常用函数,不管是文本文件,还是二进制文件,当文件处于结束状态时,若再发生读取文件的操作,则feof()函数的值是一个非0值,否则其值为0。lfeof()函数的使用格式feof(fp)其中fp是文件指针。#include#includeint main(void)char ch;FILE *fp;if(fp=fopen(example.txt,r)=NULL) printf(file can not open!n);exit(1); while) putchar(ch); fclose(fp); return 0;表8-4学号学号姓名姓名课程课程1 1成绩成绩课程课程2 2成绩成绩9900
5、1Malong879199002Lijia678299003Wangli567299004Liuhua908699005Zhangjia928999006huangshan8877 问题分析与算法设计 该问题的关键步骤:以写文件的方式打开stu_list文件;从键盘输入数据;将输入的数据写入到stu_list文件中。 定义一个结构体数组stu,首先将学生数据全部存储到该数组中。 将存储在数组stu中的数据一次性写入到stu_list文件中。 实现程序#include#include#define N 6struct new_stu int num; char name20; int s1 in
6、t s2;stuN; for(i=0;iN;i+)scanf(%d%s%d%d,&stui.num,,&stui.s1,&stui.s2); fwrite(&stu,sizeof(struct new_stu),N,fp);例例9-5 编写程序,将上述编写程序,将上述stu_list文件的内容显示在屏幕上。文件的内容显示在屏幕上。l问题分析与算法设计问题分析与算法设计 关键步骤:以读文件的方式打开关键步骤:以读文件的方式打开stu_list文件;将文件中文件;将文件中的数据读出来存储到相应的结构体变量中;将结构体变量中的数据读出来存储到相应的结
7、构体变量中;将结构体变量中的数据输出。的数据输出。 定义与定义与stu_list文件中数据类型一致的结构体变量文件中数据类型一致的结构体变量stud,用于存储从文件中读出的结构体数据。用于存储从文件中读出的结构体数据。 使用使用fread()函数,将函数,将stu_list文件中的数据读出并存储到文件中的数据读出并存储到stud中,然后输出。中,然后输出。l实现程序实现程序#include#include#define N 6struct new_stu int num; char name20; int s1 int s2;stud;fopen(stu_list,rb) for(i=0;iN
8、;i+)fread(&stud,sizeof(struct new_stu),1,fp);printf(%d %s %d %dn,stud.num,,stud.s1,stud.s2);l9.3.1 文件位置指针的定位l9.3.2 文件的格式化读写l9.3.3 文件的字符串读写fseek(fp,offset,position);例例9-6 在在例例9-4中中建立了学生数据文件建立了学生数据文件stu_list,编写程序修改其,编写程序修改其中第中第3个学生的个学生的“课程课程1成绩成绩”的值,修改用数据通过键盘输入。的值,修改用数据通过键盘输入。l问题问题分析与算法设计
9、分析与算法设计 以读写文件的方式打开文件。以读写文件的方式打开文件。 使用使用fseek()函数将文件位置指针定位到第函数将文件位置指针定位到第3个个记录位置记录位置。 将第将第3个个记录读出,记录读出,存储存储到到相应相应的的结构体变量结构体变量stud中。中。 修改修改stud中指定成员的数据。中指定成员的数据。 将将stud中的数据回写到中的数据回写到stu_list文件中文件中。l程序实现程序实现#include#includestruct new_stuint num; char name20; int s1; int s2; stud; int main(void)int size
10、;FILE *fp;size=sizeof(struct new_stu); if(fp=fopen(stu_list,rb+)=NULL) printf(file open error.n); exit(1); fseek(fp,2*size,0); fread(&stud,size,1,fp); printf(%d %s %d %dn,stud.num,,stud.s1,stud.s2);printf(new score: );scanf(%d,&stud.s1); fseek(fp,-size,1); fwrite(&stud,size,1,fp
11、); fclose(fp); return 0;nature.txt”的内容重复显示两次#includeint main(void)char ch;FILE *fp;fp=fopen(nature.txt,r);while(ch=fgetc(fp)!=EOF) putchar(ch); while(ch=fgetc(fp)!=EOF) putchar(ch); fclose(fp); return 0;#includeint main(void)char s100;int a;fscanf(stdin,%s%d,s,&a); fprintf(stdout,%s %dn,s,a); re
12、turn 0; #include#includeint main() char ch,source20,target20; FILE *fp_s,*fp_t; scanf(%s,source); scanf(%s,target); if(fp_s=fopen(source,r)=NULL) printf(Cannot open source file.n); exit(1); if(fp_t=fopen(target,w)=NULL) printf(Cannot open target file.n); exit(1); while()!=EOF) fclose(fp_s); fclose(f
13、p_t); return 0;文件数据排序。在例9-4中,建立了存储学生数据的stu_list文件,要求编写程序,将该文件的内容按“课程1成绩”降序排序后显示出来。l 问题分析与算法设计问题分析与算法设计 定义struct new_stu 类型的结构体数组stu(在stu_list文件中,学生数据的数据类型为struct new_stu 类型)。 以只读方式打开stu_list文件,将文件内容读出后存储到stu数组中。 对stu数组按s1成员进行降序排序,该过程调用sort_s1()函数实现(关于sort_s1()函数的说明参见例8-11)。l 实现程序实现程序 文件是计算机中的一个重要概念。C语言中的文件分为设备文件和磁盘文件两类,磁盘文件进一步分为ASCII码文件和二进制文件。打开文件是使用文件的第一步操作,使用fopen()函数实现,关闭文件是使用文件的最后一步操作,使用fclose()函数实现。任何打开的文件都对应一个文件指针,文件指针的类型是FILE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电工电子技术(第3版) 课件 1.1 认识电路
- 银行员工培训制度
- 银行金融业务创新管理制度
- 门诊消毒隔离制度
- 幼儿园致家长公开信(35篇)
- 艺术与设计学院服装设计专业服装美学心理学
- 河北省大名一中2025届高考数学五模试卷含解析
- 云南省保山市云县一中2025届高三下学期一模考试英语试题含解析
- 2025届安徽省“江南十校”高三第六次模拟考试语文试卷含解析
- 辽阳市重点中学2025届高三第六次模拟考试数学试卷含解析
- 广东省广州市白云区2022-2023学年九年级上学期期末语文试题
- 剧本-进入黑夜的漫长旅程
- DB43-T 958.3-2023 实验用小型猪 第3部分:配合饲料
- 化肥购销合同范本正规范本(通用版)
- 健康管理专业职业生涯规划书
- 外墙岩棉板施工方案
- 吊装葫芦施工方案
- 自动化设备调试规范
- 石瘕的护理查房
- 北师大版三年级上册数学常考应用题含答案解析
- 社区食堂投投标方案(技术标)
评论
0/150
提交评论