news 2026/9/3 5:00:11

c语言文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c语言文件操作

c语言文件操作

linxiaomei

题目1. 数据持久化——增加与保存

编写程序,从控制台输⼊ 5 个廉江红橙产地的信息,将其存⼊结构体数组中,并
使⽤ fprintf 函数将数组内容持久化存储到名为 farms.txt 的⽂本⽂件中。
⽂件操作重点:使⽤ “w” 模式打开⽂件,掌握 fprintf 的格式化写⼊。
要求:每⾏存储⼀个产地的信息,字段间⽤空格分隔。

#include<stdio.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm new_farm;FILE*fp;printf("---廉江红橙产地数据追加---\n");printf("请输入新增产地信息(格式:ID 名称 产量):\n");if(scanf("%d %s %d",&new_farm.id,new_farm.name,&new_farm.yield)!=3){printf("输入格式错误。\n");return1;}fp=fopen("farms.txt","a");if(fp==NULL){printf("错误:无法打开文件进行追加!\n");return1;}fprintf(fp,"%d %s %d\n",new_farm.id,new_farm.name,new_farm.yield);fclose(fp);printf("\n新记录已成功追加至 farms.txt 末尾。\n");return0;}


题目2.数据过滤——读取与删除

先将 farms.txt 中的所有数据加载到结构体数组中。⽤户输⼊⼀个要删除的“产地
IDˮ,程序在数组中剔除该条⽬后,将剩余数据重新覆盖写⼊ farms.txt 。
⽂件操作重点:使⽤ “r” 模式读取, feof() 或 fscanf() != EOF 判断⽂件结尾。
删除逻辑:在内存(数组)中完成删除,再通过重新打开⽂件并写⼊来实现“物理删
除ˮ。
说明:

  1. 数据⽐较重要,删除前先进⾏确认!
  2. ⽂件⽆法像数据库那样直接“删除ˮ某⾏,标准的做法是:将⽂件全部读⼊内存
    数组 → 在数组中剔除⽬标条⽬ → 以“wˮ模式重新打开⽂件覆盖写⼊。
#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount=0;intdeleteld;charconfirm;FILE*fp;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开farms.txt,请确保文件已存在。\n");return1;}while(fscanf(fp,"%d %s %d",&farms[count].id,farms[count].name,&farms[count].yield)==3){count++;}fclose(fp);if(count==0){printf("数据库为空,?数据可删除。\n");return0;}printf("\n---当前廉江红橙产地列表---\n");inti;for(i=0;i<count;i++){printf("[%d] %-12s",farms[i].id,farms[i].name);if((i+1)%3==0){printf("\n");}}printf("\n-------------------\n");printf("请输入要删除的产地ID:");scanf("%d",&deleteld);inttargetlndex=-1;for(i=0;i<count;i++){if(farms[i].id==deleteld){targetlndex=i;break;}}if(targetlndex==-1){printf("错误:未找到ID为%d的记录。\n",deleteld);return0;}printf("\n拟删除记录详情:\n");printf("ID:%d|名称:%s|产量:%d吨\n",farms[targetlndex].id,farms[targetlndex].name,farms[targetlndex].yield);printf("警告:此操作不可撤回!确定删除吗?(y/n):");getchar();scanf("%c",&confirm);if(confirm!='y'&&confirm!='Y'){printf("操作已安全取消。\n");return0;}for(i=targetlndex;i<count-1;i++){farms[i]=farms[i+1];}count--;fp=fopen("farms.txt","w");if(fp==NULL){printf("系统错误:无法更新文件数据。\n");return1;}for(i=0;i<count;i++){fprintf(fp,"%d %s %d\n",farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf("成功:ID为%d的记录已从系统中彻底删除。\n",deleteld);return0;}

题目3.精准更新——加载与修改

实现交互式修改。
程序打开⽂件并加载所有 ID 供⽤户预览。
⽤户输⼊⽬标 ID。
程序提⽰⽤户选择修改项(1.修改名称 2.修改产量)。
⽤户输⼊新值后,程序更新数组并同步回⽂件。
⽂件操作重点:掌握“内存加载 →→ 修改 →→ 重新回写ˮ的完整链路。
要求:利⽤ switch-case 结构处理⽤户的修改选择。

#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){OrangeFarm farms[100];intcount=0;inttargetld,choice;FILE*fp;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开farms.txt,请确保文件已存在。\n");return1;}while(fscanf(fp,"%d %s %d",&farms[count].id,farms[count].name,&farms[count].yield)==3){count++;}fclose(fp);if(count==0){printf("数据库为空,请先添加数据。\n");return0;}printf("---当前系统内的产地ID列表---\n");inti;for(i=0;i<count;i++){printf("[%d]%-12s",farms[i].id,farms[i].name);if((i+1)%3==0){printf("\n");}}printf("\n------------------\n");printf("请输入您想要修改的产地 ID:");scanf("%d",&targetld);intindex=-1;for(i=0;i<count;i++){if(farms[i].id==targetld){index=1;break;}}if(index==-1){printf("未找到ID为%d的记录。\n",targetld);return0;}printf("\n已锁定产地:%s(产量:%d吨)\n",farms[index].name,farms[index].yield);printf("1.修改产地名称\n");printf("2.修改预计产量\n");printf("3.取消修改\n");printf("请选择操作(1-3):");scanf("%d",&choice);switch(choice){case1:printf("请输入新的名称:");scanf("%s",farms[index].name);break;case2:printf("请输入新的产量(吨):");scanf("%d",farms[index].yield);break;case3:printf("操作已取消。\n");return0;default:printf("非法输入,操作终止。\n");return0;}fp=fopen("farms.txt","w");if(fp==NULL){printf("回写文件失败!\n");return1;}for(i=0;i<count;i++){fprintf(fp,"%d %s %d\n",farms[i].id,farms[i].name,farms[i].yield);}fclose(fp);printf("ID为%d的记录已成功更新。\n",targetld);return0;}

题目4.条件检索——读取与查询

编写⼀个查询⼯具。⽤户输⼊⼀个“产量阈值ˮ,程序打开⽂件读取数据,通过遍
历结构体数组,筛选并打印出所有产量⼤于该阈值的产地信息。
⽂件操作重点:使⽤循环配合 fscanf 逐⾏解析数据。
逻辑重点:考查结构体成员的访问与逻辑判断表达式。

#include<stdio.h>#include<stdlib.h>typedefstruct{intid;charname[50];intyield;}OrangeFarm;intmain(){FILE*fp;OrangeFarm temp;intthreshold;intfoundCount=0;fp=fopen("farms.txt","r");if(fp==NULL){printf("错误:无法打开数据文件farms.txt,请确保文件已存在。\n");return1;}printf("----------廉江红橙产量筛选系统----------\n");printf("请输入产量阈值(吨):");if(scanf("%d",&threshold)!=1){printf("输入无效。\n");fclose(fp);return1;}printf("\n正在查询产量大于%d吨的产地...\n",threshold);printf("--------------------------------------------\n");printf("%-10s %-20s %-10s\n","ID","产地名称","预计产量(吨)");printf("--------------------------------------------\n");while(fscanf(fp,"%d %s %d",&temp.id,temp.name,&temp.yield)==3){if(temp.yield>threshold){printf("%-10d %-20s %-10d\n",temp.id,temp.name,temp.yield);foundCount++;}}if(foundCount==0){printf("未找到产量超过%d吨的记录。\n",threshold);}else{printf("--------------------------------------------\n");printf("查询完毕,共找到%d条记录。\n",foundCount);}fclose(fp);return0;}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 9:23:23

【软件测试面试】职言 | 40个软件测试面试题,找工作看过来

初级难度 如果你在这个领域没有太多经验&#xff0c;并且刚刚开始入行&#xff0c;这几个问题对于刚起步的测试人员来说&#xff0c;在面试时经常常会问到。 1. 你对软件测试的理解是什么&#xff1f; 软件测试是用来判断软件程序的有效性、准确性和可用性的程序。因此&…

作者头像 李华
网站建设 2026/9/2 20:59:27

物联网边缘设备:轻量级TensorRT运行时部署方案

物联网边缘设备&#xff1a;轻量级TensorRT运行时部署方案 在智能制造车间的一角&#xff0c;一台搭载Jetson Xavier NX的视觉检测设备正以每秒30帧的速度扫描流水线上的电子元件。它需要在20毫秒内完成缺陷识别并触发剔除机制——这不仅是对算法精度的考验&#xff0c;更是对推…

作者头像 李华
网站建设 2026/9/2 21:01:04

springboot_ssm基于B_S模式的小型房屋租赁系统的房东_t65a9--论文

目录具体实现截图系统所用技术介绍写作提纲核心代码部分展示结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 springboot_ssm基于B_S模式的小型房屋租赁系统的房东_t65a9–论文 系统所用技术介绍 本毕业设计项目…

作者头像 李华
网站建设 2026/9/2 23:44:08

springboot_ssm基于j2ee的问卷调查系统--论文

目录 具体实现截图系统所用技术介绍写作提纲核心代码部分展示结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 springboot_ssm基于j2ee的问卷调查系统–论文 系统所用技术介绍 本毕业设计项目基于B/S结构模式&a…

作者头像 李华
网站建设 2026/9/2 23:25:58

Java毕设项目推荐-基于springboot的校园二手交易平台闲置物品 旧课本、笔记本电脑、健身器材、生活用品【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 11:05:49

计算机Java毕设实战-基于springboot的校园二手交易平台基于springboot+mysql+veu校园二手书交易管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华