文件的简单操作(C语言版)
发布日期:2022-02-27 02:37:47 浏览次数:59 分类:技术文章

本文共 6834 字,大约阅读时间需要 22 分钟。

文件的读写:

1.按字符读写文件

fgetc( )函数:从指定文件中读入一个字符,该文件必须是以只读或者读写方式打开的

原型:char fgetc(FILE *fp); ch=fgetc(fp);表示从fp指向的文件中读取一个字符存到字符变量ch中,并将读写位置移到下一个字符的位置;

fputc( )函数:用于将一个字符写入到指定文件中

原型:char fputc(char ch,FILE *fp);

2.读写文件中的字符

fgetc( )函数:从指定文件中读入一个字符串

char str[20];FILE *fp;fgets(str,20,fp);

fputc( )函数:用于将字符串写入文件

fputs(char *str,FILE *fp)/*例子:*/fputs("hello",fp);
3.按格式读写文件

fscanf()函数:

FILE *fp;fscanf(fp,"%s%d",no,score);//其中,中间参数的格式只能是普通格式,而不能有左对齐右对齐的写法,而fprintf()函数支持

fprintf()函数:

FILE *fp;fprintf(fp,"%-10s%-5d",no,score);
4.按数据块读写文件

fread()函数:从文件中读取数据块

//例子struct work w[5];fread(w,sizeof(struct work),5,fp);

fwrite()函数:把数据块写入到文件中

//例子struct work w = {
"张华",3200};fwrite(&w,sizeof(struct work),1,fp);

测试样例

/*课本上的几乎所有例子。环境:Dev-C++ 5.11*/#include
#include
#include
/*测试数据: (使用fputc函数) 小明 2500小强 3600柯南 2500邓丽君 10000张国荣 99990*/void fileWrite(){
FILE *fp; char filename[20]; char str[20]; int i,j; printf("请输入文件名:\n"); gets(filename); fp=fopen(filename,"w"); if(fp==NULL){
printf("文件打开失败!\n"); exit(0); } printf("请输入5个职工的信息:\n"); for(i=0;i<5;i++){
gets(str); for(j=0;str[j]!='\0';j++) fputc(str[j],fp); fputc('\n',fp); } fclose(fp); printf("职工信息成功保存在%s中\n",filename);}/*测试数据: (使用fputs函数)小明 2500小强 3600柯南 2500邓丽君 10000张国荣 99990 */void testFputs(){
FILE *fp; char filename[20],str[20]; int i; printf("请输入文件名:\n"); gets(filename); fp=fopen(filename,"w"); if(fp==NULL){
printf("文件打开失败!\n"); exit(0); } printf("请输入5个职工的信息:\n"); for(i=0;i<5;i++){
gets(str); fputs(str,fp); fputc('\n',fp); } fclose(fp); printf("职工信息成功保存在%s中\n",filename);}/*读取数据:fgetc()函数*/ void testGetc(){
FILE *fp; char filename[20],ch; printf("请输入文件名:\n"); gets(filename); fp=fopen(filename,"r"); if(fp==NULL){
printf("文件打开失败!\n"); exit(0); } printf("姓名\t工资\n"); /* ch=fgetc(fp); while(!feof(fp)){ printf("%c",ch); ch=fgetc(fp); } */ while((ch=fgetc(fp))!=EOF){
printf("%c",ch); } fclose(fp);}/*fgets函数*/ void testGets(){
FILE *fp; char filename[20],str[20]; printf("请输入文件名:\n"); gets(filename); fp=fopen(filename,"r"); if(fp==NULL){
printf("文件打开失败!\n"); exit(0); } printf("姓名\t工资\n"); while(!feof(fp)){
//if(fgets(str,20,fp)==NULL) break; fgets(str,20,fp); printf("%s",str); } fclose(fp);}/*按照格式读写文件*/typedef struct work{
char name[20]; float wage;}WORK;void testWrite(){
FILE *fp; char filename[20]; WORK w; int i; printf("请输入文件名:\n"); gets(filename); fp=fopen(filename,"w"); if(fp==NULL){
printf("文件打开失败!\n"); exit(0); } printf("请输入5个职工的信息:\n"); for(i=0;i<5;i++){
scanf("%s%f",w.name,&w.wage); fprintf(fp,"%-10s%-10.2f\n",w.name,w.wage); } fclose(fp); printf("职工信息成功保存在%s中\n",filename);} /*读入职工数据显示在屏幕上,并把高于平均水平的职工信息存到另一个文件中*/void testRead(){
char file1[20],file2[20]; FILE *fp1,*fp2; WORK w[5]; int n,i = 0,j = 0; float avg = 0; printf("请输入存放职工信息的文件名:\n"); //gets(file1); if((fp1=fopen("3.txt","r"))==NULL){
printf("文件1打开失败!"); exit(0); } printf("请输入存放工资高于平均水平的职工信息的文件名:\n"); //gets(file2); if((fp2=fopen("4.txt","w"))==NULL){
printf("文件2打开失败!"); exit(0); } printf("姓名\t工资\n"); while(!feof(fp1)){
n = fscanf(fp1,"%s%f",w[i].name,&w[i].wage); if(n<2) break;//如果去掉这句话,因为3.txt数据结尾还有换行符,文件结束标志为0(即文件没有结束 ),程序会再读一次 printf("%-10s%-10.2f\n",w[i].name,w[i].wage); avg+=w[i].wage; i++; } avg/=i; for(j=0;j
avg){
fprintf(fp2,"%-10s%-10.2f\n",w[j].name,w[j].wage); //printf("i=%.3f,avg=%.2f\n",w[j].wage,avg); } } fclose(fp1); fclose(fp2);}/*按数据块读写文件——用于处理二进制文件:fread(),fwrite()*/void testblock(){
int i; FILE *fp; WORK w; char file[20]="5.txt"; if((fp=fopen(file,"wb"))==NULL){
//二进制模式打开文件 printf("文件打开失败!"); exit(0); } printf("请输入5个职工的信息:\n"); for(i=0;i<5;i++){
scanf("%s%f",w.name,&w.wage); fwrite(&w,sizeof(WORK),1,fp); } fclose(fp); printf("职工信息成功保存在%s中\n",file);} /*检验二进制文件是否正确?*/void testblockRead(){
char file1[20],file2[20]; FILE *fp1,*fp2; WORK w[5]; int n,i = 0,j = 0; float avg = 0; printf("请输入存放职工信息的文件名:\n"); //gets(file1); if((fp1=fopen("5.txt","rb"))==NULL){
printf("文件1打开失败!"); exit(0); } printf("请输入存放工资高于平均水平的职工信息的文件名:\n"); //gets(file2); if((fp2=fopen("6.txt","w"))==NULL){
printf("文件2打开失败!"); exit(0); } printf("姓名\t工资\n"); while(!feof(fp1)){
n = fread(w+i,sizeof(WORK),1,fp1); if(n<1) break;//如果去掉这句话,因为3.txt数据结尾还有换行符,文件结束标志为0(即文件没有结束 ),程序会再读一次 printf("%-10s%-10.2f\n",w[i].name,w[i].wage); avg+=w[i].wage; i++; } avg/=i; for(j=0;j
avg){
fprintf(fp2,"%-10s%-10.2f\n",w[j].name,w[j].wage); //printf("i=%.3f,avg=%.2f\n",w[j].wage,avg); } } fclose(fp1); fclose(fp2);} /*文件的随机读写——使用到的函数有:fseek(),rewind(),ftell()*/ //测试数据:1 2 3 4 5 6 7 8 9 10 void testfseek(){
FILE *fp; int x,i; if((fp=fopen("1.txt","wb+"))==NULL){
printf("文件1.bin打开失败!"); exit(0); } printf("请输入10个整数:\n"); for(i=0;i<10;i++){
scanf("%d",&x); fwrite(&x,sizeof(int),1,fp); } fseek(fp,4*sizeof(int),SEEK_SET);//从文件头开始移动 fread(&x,sizeof(int),1,fp);//从文件中读信息 printf("第5个数:%d\n",x); fseek(fp,1*sizeof(int),SEEK_CUR);//从当前位置开始移动 fread(&x,sizeof(int),1,fp);//从文件中读信息 printf("第7个数:%d\n",x); fclose(fp);}/*fgets函数的扩展内容*/void testGetsPlus(){
FILE *fp; int i; char str[5]; if((fp=fopen("2-2.c","r"))==NULL){
printf("文件1.bin打开失败!"); exit(0); } while(!feof(fp)) {
if(fgets(str,5,fp)==NULL) break; i++; printf("第%d次调用str中的内容:%s\n",i,str); } fclose(fp);}/*使用fgets()函数逐行读入每个系统用户名称*/void trim(char *str){
//用来去除换行符的 int i; for(i=0;str[i]!='\0';i++){
if(str[i]=='\n') str[i]='\0'; }}void testUsers(){
FILE *fp; int flag = 0; char str[20] ,user[20]; if((fp=fopen("users.txt","r"))==NULL){
printf("文件users.txt打开失败!"); exit(0); } printf("请输入用户名:\n"); gets(user); while(fgets(str,20,fp)!=NULL){
trim(str); if(strcmp(str,user)==0){
flag = 1; break; } } if(flag==1) printf("%s是有效用户名!\n",user); else printf("%s不是有效用户名!\n",user); fclose(fp);} /*标准输入输出的重定向 */void testRedirect(){
int x,y,sum; scanf("%d%d",&x,&y); sum = x + y; printf("%d + %d = %d",x,y,sum);}/*例题练习:统计文本字符*/void countChar(){
FILE *fp; int count = 0; char ch; if((fp=fopen("users.txt","r"))==NULL){
printf("此文件打开失败!"); exit(0); } while((ch=fgetc(fp))!=EOF){
//不包括换行符 if(ch!='\n') count++; } printf("该文件中的总字符个数为:%d",count); fclose(fp);}/*文件之间的复制*/void copy() {
FILE *fp1,*fp2; char ch; if((fp1=fopen("users.txt","r"))==NULL){
printf("此文件1打开失败!"); exit(0); } if((fp2=fopen("副本.txt","w"))==NULL){
printf("此文件2打开失败!"); exit(0); } while((ch=fgetc(fp1))!=EOF){
//不包括换行符 fputc(ch,fp2); } fputc('\n',fp2); printf("文件copy完成!"); fclose(fp1); fclose(fp2);}/*把100以内的素数保存到su.txt中*/int IsSushu(int n){
int i; for(i=2;i
=60){ fprintf(fp2,"%-14s%-4.2f\n",s[j].no,s[j].score);count++; } } printf("总人数:%d\n及格人数:%d\n平均成绩:%.2f",j,count,avg); fclose(fp1); fclose(fp2);}//在主函数中调用上述声明的函数,即可试验功能int main(){ stu(); return 0;}

转载地址:https://blog.csdn.net/weixin_43376042/article/details/113694523 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SSM框架入门知识点跟学雷神视频笔记
下一篇:判断回文字符串

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月07日 06时27分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

《富人的逻辑》书中的精髓:为什么暴富起来的人会在短期内失去财富,我们又该如何去创造财富和持续拥有财富。 2019-04-26
作文提升~老师整理的优美比喻句太实用 2019-04-26
作文提升~老师整理的优美拟人句太实用 2019-04-26
作文提升~老师整理的优美排比句太实用 2019-04-26
作文提升~老师整理的夸张句,太实用了,赶快收藏 2019-04-26
作文提升~写景常用的拟人句,很经典 2019-04-26
小学教师资格考试科目一思维导图-教育观、教师观和学生观 2019-04-26
小学教师资格考试科目一思维导图-职业道德 2019-04-26
小学教师资格考试科目一思维导图-逻辑思维能力、阅读理解、写作能力 2019-04-26
什么是劳动型创业者?什么叫做社会平均利润? 2019-04-26
什么是中奖型创业者? 2019-04-26
什么是套利型创业者? 2019-04-26
什么是取势型创业者? 2019-04-26
为什么煲鸡汤给病人喝? 2019-04-26
带团队很简单,管理就是十六字!(管理者必看) 2019-04-26
写作技巧~100段作文排比句(61-80段),考试一定用得上,赶紧收藏! 2019-04-26
判别式模型和生成式模型 2019-04-26
SVM和LR的适用情况,SVM中核函数的作用。 2019-04-26
以下机器学习中,在数据预处理时,不需要考虑归一化处理的是 2019-04-26
在统计模式识分类问题中,当先验概率未知时,可以使用N-P判决和最小最大损失准则 2019-04-26