版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式Linux
C文件处理1.文件简单使用(fgetc()、fputc()、fgets()、fputs())文件格式化读写(fprintf()、fscanf())文件数据块读写(fread()、fwrite())任务描述编一程序,能够创建一个文本文件,文件名由用户从键盘输入。向文件中写入多个字符,直到输入一个“#”,才停止写入。技能目标1.了解文件的处理过程2.学会打开与关闭文件3.能够对文件进行读写操作任务分析关键点1:如何采用C语言创建一个文件,并向该文件中写入字符如果创建的文件名由用户从键盘输入,需要定义一个字符数组
filename[],用来存放创建文本文件名。关键点2:如何操作文件定义文件指针变量fp。打开文件。以写文件方式打开或创建一个文件。如果打开文件失败,输出错误信息并结束程序。文件写入。应用循环结构,从键盘依次输入字符,顺序逐个写入文件,最后输入“#”停止写入。关闭文件。相关知识文件“文件”是一组相关数据的有序集合,如Word文件(扩展名.doc),Excel统计表文件(扩展名.xls),Photoshop图片文件(扩展名.psd)等。文件通常驻留在外部介质上的(如磁盘),在使用时才调入内存。文件的存储从文件编码方式看,文件可分为ASCII码文件和二进制码文件。ASCII文件也称文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。123按文本文件存放123按二进制文件存放磁盘文件内存储器………………文件缓冲区数据存储区读文件(输入)写文件(输出)3.文件指针通过文件指针可以对它所指向的文件进行打开、关闭、读、写等各种操作。定义说明文件指针的一般形式为:FILE
*指针变量
(如:FILE
*fp;)文件指针是FILE类型,文件类型所有的文件函数等定义在stdio.h中,源程序的开头包含stdio.h,就可直接使用文件函数了。4.文件的处理文件的处理必须包括3个过程:打开文件、读或写文件、关闭文件。4.打开文件指针5.打开文件通过fopen函数打开文件,格式为:文件指针名=fopen(文件名,使用文件方式);
“文件名”是被打开文件的文件名或者路径名;“使用文件方式”是指文件的存储类型和操作要求。如:FILE
*fp;fp=fopen("test.txt","r");/*文件名为test.txt,该文件与源程序在同一路径*/fp=fopen(filename,"w")
/*文件名为filename变量中保存的数据*/fp=("c:\\test.txt","rb")/*文件名为test.txt,该文件保存在c盘下*/经常用以下程序段来判断是否打开文件:
if((fp=fopen("test.txt","rb")==NULL){printf("\ncan
not
open
file!");getch();exit(0);}文件的操作方式5文件类型使用方件方式处理方式指定文件不存在时指定文件存在时文本文件r只读出错正常打开w只写建立新文件文件原有内容丢失a追加建立新文件在原文件末尾写数据r+读写出错正常打开w+读写建立新文件文件原有内容丢失a+读写建立新文件在原文件末尾写数据二进制文件rb只读出错正常打开wb只写建立新文件文件原有内容丢失ab追加建立新文件在原文件末尾写数据rb+读写出错正常打开wb+读写建立新文件文件原有内容丢失ab+读写建立新文件在原文件末尾写数据5.文件读写函数字符读写函数 :fgetc(
)和fputc(
)字符串读写函数:fgets(
)和fputs(
)函数调用形式功能返回值fgetcfgetc(fp)从指定的文件中读一个字符读成功则返回所读的字符,否则返回EOFfputcfputc(ch,fp)把一个ch字符写入指定的文件中写入成功则返回写入的字符,否则返回EOFfgetsfgets(str,n,fp)从fp所指的文件中读出n-1个字符送入字符数组str中读成功则返回地址str,文件结束或出错返回EOFfputsfputs(str,fp)把字符串str写入文件中写入成功则返回0,否则返回非06、关闭文件
fclose(文件指针);如:fclose(fp);程序代码/*定义文件指针*/#include
<stdlib.h>#include
<stdio.h>void
main(){FILE
*fp;char
ch,filename[20];printf("input
filename\n");scanf("%s",filename);fp=fopen(filename,"w");/*由用户从键盘输入创建文件名*//*以写文本文件方式打开文件*//*如果打开文件失败,则结束程序*/if(
fp==NULL
){printf("cannotopen
file\n");getchar();exit(0);/*待按任意键继续*//*终止程序*/}ch=getchar();
/*接收执行scanf语句时最后输入的回车符
*/printf("input
charfile
end#:\n");
/*提示输入最后#结束*//*
接收输入的第一个字符*//*字符写入文件中*//*从键盘接收输入的字符*/ch=getchar();while(
ch!=‘#’
){fputc(ch,fp);ch=getchar();}fclose(fp);/*关闭文件*/}程序思考如果要输入的文件名有目录,应如何输入?fp=fopen(filename,"w");其中filename可指定为字符串,打开指定文件
fp=fopen(“filename.txt”,"w");打开当前目录下filename.txt文本文;
fp=fopen(“c:\\mydir\\filename.txt”,"w");打开目录c:\mydir\下文本文件filename.txt。如何将刚创建的文本文件显示在屏幕上呢?#include
<stdlib.h>#include
<stdio.h>void
main(
){FILE
*fp;
/*定义文件指针*/char
ch,filename[10];printf("input
filename\n");scanf("%s",filename); /*由用户从键盘输入创建文件名*/fp=fopen(filename,"r");/*以读文本文件方式打开文件*/{if((fp)==NULL)
/*如果打开文件失败,则结束程序*/printf("cannotopen
file\n");getch();/*待按任意键继续*/exit(0);
/*终止程序*/}ch=getchar();/*接收执行scanf语句时最后输入的回车符*/printf("output
char
file
to
screen:\n");/*提示输入最后#结束*/ch=fgetc(fp);
/*读取第一个字符*/while(
ch!=EOF
){putchar(ch);/*字符输出到屏幕上*/ch=fgetc(fp);
/*读取下一个字符*/}fclose(fp);/*关闭文件*/getchar();}采用fgets()函数如何实现?#include
<stdio.h>#include
<stdlib.h>void
main(){FILE
*fp;
char
str[100];fp
=
fopen("firstFile.txt","r");if(fp
==
NULL){printf("cannot
opent
file!\n");getchar();exit(0);}fgets(str,sizeof(str),fp);printf("%s\n",str);fclose(fp);}任务描述编一个程序,由计算机给出5道20以内2个两位数的加法题,将题目与学生的答题结果保存在“exams.txt”文件中,将正确答案保存在
“answer.txt”文件中。程序设计思路声明两个文件指针变量,分别指向“exams.txt”和“answer.txt”;2.打开两个文件;3.随机生成5道加法题,把题目和学生答案按指定格式写到文件
“exams.txt”,同时将标准答案按一定格式写入文件“answer.txt”中;4.关闭这两个文件。关键点:如何将数据按照一定格式写入指定文件中。格式化读写函数fscanf()和fprintf()fprintf函数与printf函数的功能相似,都是格式化写函数。printf函数是写入磁盘文件。函数调用格式为:fprintf(文件指针,格式字符串,输出表列);例如:fprintf(fp,"%d%c",j,ch);fscanf函数与scanf函数的功能相似,都是格式化读函数。fscanf函数从磁盘文件中读内容。函数调用格式为:fscanf(文件指针,格式字符串,输入表列);例如:fprintf(fp,"%d%s",&j,s);程序代码#include
<stdio.h>#include
<stdlib.h>#include
<time.h>main(){int
i=0,op1=0,op2=0,pupil=0,answer=0,m;FILE
*fp=NULL,*fq=NULL;printf("请输入加法题目总数:");scanf("%d",&m);fp=fopen("d:\\exams.txt","w");if(fp==NULL){printf("Open
error!!!\n");getchar();exit(0);}fq=fopen("d:\\answer.txt","w");if(fp==NULL){printf("Open
error!!!\n");getchar();exit(0);}
srand(time(0));for(
i=1;
i
<=
m;
i++){op1=rand()%11+10;op2=rand()%11+10;printf("%d+%d=",op1,op2);scanf("%d",&pupil);answer=op1+op2;fprintf(fp,"%d+%d=%d\n",
op1,op2,pupil);fprintf(fq
,"%d+%d=%d\n",
op1,op2,answer);}fclose(fp);fclose(fq);}应用拓展编写考试评分程序,对小学生所做的答案进行阅卷。#include
<stdio.h>#include
<stdlib.h>void
main(){int
i=0,
op1=0,
op2=0,
pupil=0,
answer=0,total=0;FILE
*fp=NULL,
*fq=NULL;fp
=
fopen("exams.txt","r");if(fp
==
NULL){printf("cannot
open
file!\n");getchar();exit(0);}fq
=
fopen("answer.txt","r");if(fp
==
NULL){printf("cannot
open
file!\n");getchar();exit(0);}for(i
=
1;
i
<=
3;
i++){fscanf(fp,"%d+%d=%d",&op1,&op2,&pupil);fscanf(fq,"%d+%d=%d",&op1,&op2,&answer);printf("%d+%d=%d
right
answer:%d\n",op1,op2,pupil,answer);if(pupil
==
answer){total
=
total
+
33;printf("right!\n");}else{printf("wrong\n");}}printf("score=%d\n",total);fclose(fp);fclose(fq);getchar();}任务描述编写程序,实现简单的人员信息输入、显示和修改功能,并将输入和修改后的数据写入文件。任务分析1、定义一个结构体数组,存放多个人员的信息;2、声明一个文件指针变量,指向要写入信息的文件并打开该文件;3、获取用户输入的人员信息,并写入指定文件中;4、显示所有人员的信息。5、更新一个人员的信息后,重新在屏幕上输出所有人员的信息。关键点:1.如何将结构数据存入文件?2.如何从文件指定位置开始读写一部分内容?相关知识1、数据块读写函数freed()和fwrite()读数据块函数调用的一般形式为:
fread(buffer,
size,
count,
fp);写数据块函数调用的一般形式为:
fwrite(buffer,
size,
count,
fp);其中:buffer
是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。size
表示数据块的字节数。count
表示要读写的数据块块数。fp
表示文件指针。符号常数整数值含义SEEK_SET0文件头SEEK_CUR1当前位置SEEK_END2文件末尾2、文件随机定位函数移动文件指针到文件开始位置:
rewind(文件指针);将文件指针从起始点向后移动。
fseek(文件指针,位移量,起始点);“位移量”表示移动的字节数,通常是n*sizeof(数据类型),即以某一种数据类型的长度为单位。如sizeof(struct
rec)。“起始点”有三种:文件首,当前位置和文件尾。如:fseek(fp,2*sizeof(structrec),0);“0”表示起始点是文件头,可替换为符号常数“SEEK_SET”,即fseek(fp,
2*sizeof(struct
rec),
SEEK_SET)。程序代码#include<stdio.h>#include<stdlib.h>#define
NUM
3void
main(
){FILE*fp1;int
i;struct
rec{char
id[10];charname[15];chardepartment[15];}record[NUM];/*定义结构体类型*/printf("******************
人事信息管理*********************\n");if
((fp1=fopen("infile.txt","wb"))==NULL){printf("cannotopen
file");getchar();exit(0);}printf("Please
input
record
");for(i=0;i<NUM;i++){printf("Pleaseinputid:");scanf("%s",record[i].id);printf("Pleaseinputname:");scanf("%s",record[i].name);printf("Pleaseinputdepartment:");scanf("%s",record[i].department);fwrite(&record[i],sizeof(struct
rec),1,fp1);}fclose(fp1);if((fp1=fopen("infile.txt","rb+"))==NULL){printf("cannotopen
file");getchar();exit(0);}printf("************************************\n");printf("%-10s%-15s%-15s\n","id","name","department");printf("************************************\n");for
(i=0;i<NUM;i++){fread(&record[i],sizeof(struct
rec),1,fp1);printf("%-10s%-15s%-15s\n",record[i].id,record[i].name,record[i].department);}/*以下进行文件的随机读写*/fseek(fp1,2*sizeof(struct
rec),0);
/*定位文件指针指向第三条记录*/fwrite(&record[1],sizeof(struct
rec),1,fp1);/*在第三条记录处写入第二条记录*/rewind(fp1);
/*移动文件指针到文件头*/printf("************************************\n");printf("%-10s%-15s%-15s\n","id","name","department");printf("************************************\n");for
(i=0;i<NUM;i++){/*重新输出文件内容*/fread(&record[i],sizeof(struct
rec),1,fp1);printf("%-10s%-15s%-15s\n",record[i].id,record[i].name,record[i].department);}fclose(fp1);getchar();}技能训练从键盘上输入若干个学生的学号及考试成绩,将这些数据写入磁盘文件y.dat中。(由学号等于0作终止标记)#include
"stdio.h"main(){struct
student{int
num;float
score;};struct
student
stu;FILE
*fp;fp=fopen("y.dat","wb");scanf("%d%f",&stu.num,&stu.score);while(stu.num
!=
0
){fwrite(&stu,sizeof(struct
student),1,fp);scanf("%d%f",&stu.num,&stu.score);}fclose(fp);}练习1.从键盘上输入两个学生的基本信息(姓名,年龄),然后写入到一个文件中,最后读出这两个学生的数据,并显示在屏幕上。2.使用重定位fseek函数,直接读取上述文件中的第2个学生的数据。#include
<stdio.h>#include
<stdlib.h>void
main(){struct
student{char
name[10];int
age;}boya[2],boyb[2],*pa,*pb;FILE
*fp;int
i;fp
=
fopen("students.txt","w+");if(fp
==
NULL){printf("cannot
open
file!\n"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《创新的圆环》课件
- 2024年度淘宝平台商家产品展示与推广合同3篇
- 2024年度智能家居设备外协设计与生产合同3篇
- 2024年度铁路货运安全责任合同范本3篇
- 2024年度医疗设备购置三方贷款及售后保障协议2篇
- 2024年度高端装备制造股权补偿转让协议3篇
- 2024年新型叉车操作员协议3篇
- 《增值税新知识学习》课件
- 2025采购合同签订管理办法合同签订审查备案管理办法
- 2024年标准协议附加条款模板指南版B版
- 第21课《小圣施威降大圣》课件-2024-2025学年七年级语文上册同步备课课件(统编版2024)
- 政府采购评审专家考试试题库(完整版)
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
- 山东省青岛市城阳区2023-2024学年七年级上学期期末数学试题
- 结核分枝杆菌实验活动风险评估报告
- 糖尿病 第九版内科学
- 滨江大道西段污水管道施工工程施工组织设计
- 电热水器澳洲标准中文版(doc 83页)
- 第二章珠江水系
- 牛头刨床说明书
- SJ8002B电子测量原理实验指导书(V3.1)
评论
0/150
提交评论