news 2026/5/4 14:24:59

C语言文件指针与结构体数据读写实操案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言文件指针与结构体数据读写实操案例

C语言文件指针与结构体数据读写实操案例

一、案例概述

在C语言程序开发中,文件操作是数据持久化的核心手段,而结构体常用于封装业务数据,结合文件指针实现结构体数据的读写、存储与解析,是开发学生管理、员工信息、日志记录等小型管理系统的基础技能。

本案例基于标准C语言库函数,以学生信息管理为业务场景,演示文件指针基础用法、结构体数据写入文本文件、从文件读取数据并解析、追加写入数据等核心实操,全程使用标准库stdio.hstdlib.h完成编译运行,无需依赖第三方库,适配VS、Dev-C++、GCC等任意开发编译环境。

二、开发环境与预备知识

1. 开发环境

编译器:GCC 9.0及以上 / Dev-C++ 5.11 / Visual Studio 2022
运行平台:Windows、Linux通用
依赖头文件:stdio.hstdlib.hstring.h

2. 核心知识点

  1. 文件指针FILE *:C语言操作文件的句柄,所有文件读写都通过文件指针完成;
  2. 文件打开模式:w覆盖写入、r只读、a追加写入、w+读写、r+可读可修改;
  3. 常用函数:fopen()打开文件、fprintf()格式化写入、fscanf()格式化读取、fclose()关闭文件;
  4. 结构体定义:自定义学生信息结构体,封装学号、姓名、成绩等字段。

三、结构体定义与功能设计

1. 自定义学生结构体

// 定义学生信息结构体typedefstruct{charid[20];// 学号charname[10];// 姓名floatscore;// 成绩}Student;

2. 案例功能模块

  1. 新建文件并写入多条学生结构体数据;
  2. 以只读模式打开文件,读取所有学生信息并控制台打印;
  3. 以追加模式打开文件,新增一条学生数据;
  4. 异常处理:判断文件是否打开成功,避免空指针操作崩溃。

四、完整实操代码实现

#include<stdio.h>#include<stdlib.h>#include<string.h>// 学生结构体定义typedefstruct{charid[20];charname[10];floatscore;}Student;// 函数声明:写入学生数据到文件voidwriteStudentData();// 函数声明:读取文件中学生数据voidreadStudentData();// 函数声明:追加学生数据到文件voidappendStudentData();intmain(){// 写入初始数据writeStudentData();// 读取并打印数据readStudentData();// 追加新数据appendStudentData();printf("数据读写与追加操作执行完成\n");return0;}// 写入结构体数据到文件voidwriteStudentData(){FILE*fp=fopen("student.txt","w");if(fp==NULL){printf("文件打开失败,无法写入数据\n");return;}// 定义并初始化3个学生结构体变量Student s1={"2026001","ZhangSan",88.5};Student s2={"2026002","LiSi",92.0};Student s3={"2026003","WangWu",79.5};// 通过文件指针格式化写入结构体字段fprintf(fp,"%s %s %.2f\n",s1.id,s1.name,s1.score);fprintf(fp,"%s %s %.2f\n",s2.id,s2.name,s2.score);fprintf(fp,"%s %s %.2f\n",s3.id,s3.name,s3.score);fclose(fp);}// 读取文件中的结构体数据voidreadStudentData(){FILE*fp=fopen("student.txt","r");if(fp==NULL){printf("文件打开失败,无法读取数据\n");return;}Student temp;printf("=====读取到的学生信息=====\n");// 循环读取每行数据,赋值给临时结构体while(fscanf(fp,"%s %s %f",temp.id,temp.name,&temp.score)!=EOF){printf("学号:%s 姓名:%s 成绩:%.2f\n",temp.id,temp.name,temp.score);}fclose(fp);}// 追加写入新的学生数据voidappendStudentData(){FILE*fp=fopen("student.txt","a");if(fp==NULL){printf("文件打开失败,无法追加数据\n");return;}Student s4={"2026004","ZhaoLiu",90.0};fprintf(fp,"%s %s %.2f\n",s4.id,s4.name,s4.score);fclose(fp);}

五、代码解析与运行结果

1. 核心代码解析

  1. 文件打开与判空:使用fopen获取文件指针后,必须做NULL判断,防止文件路径错误、权限不足导致程序崩溃;
  2. 写入逻辑w模式会清空原有文件内容,重新写入,适合初始化数据存储;
  3. 读取逻辑:利用fscanf循环读取,以EOF作为文件结束标志,逐行解析字符串与浮点型数据存入结构体;
  4. 追加逻辑a模式在文件末尾新增数据,不覆盖原有内容,适配动态新增业务数据场景。

2. 运行效果

程序运行后自动生成student.txt文件,文件内存储结构化学生信息;控制台打印全部读取的学生数据,追加操作完成后文件末尾新增第四条学生记录,数据格式规整、读写无误。

六、常见问题与解决方案

  1. 文件打开失败:检查程序运行目录是否有权限创建文件,Linux环境需赋予文件夹读写权限;
  2. 读取数据乱码:写入和读取格式符必须严格对应,字符串用%s、浮点型用%f,字段顺序不能错乱;
  3. 忘记关闭文件fclose必须配对使用,否则会造成文件资源占用、数据缓存未落地丢失;
  4. 结构体数组读写:可扩展为结构体数组,循环批量读写,适配批量学生信息管理场景。

七、案例总结

本案例完整实现了C语言文件指针与结构体的联合应用,掌握了文件打开关闭、格式化读写、数据追加、异常判空等实操能力。该方案可直接延伸至员工信息管理、系统日志存储、配置文件读写等实际开发场景,是C语言零基础进阶到小型项目开发的必备实操案例,理解文件指针操作逻辑和结构体数据封装思想,能够快速拓展实现更复杂的数据持久化功能。

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

3分钟搞定淘宝任务:淘金币智能助手让你的时间更有价值

3分钟搞定淘宝任务&#xff1a;淘金币智能助手让你的时间更有价值 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 每天…

作者头像 李华
网站建设 2026/5/4 14:14:11

终极指南:如何用Squirrel-RIFE将低帧率视频秒变丝滑流畅

终极指南&#xff1a;如何用Squirrel-RIFE将低帧率视频秒变丝滑流畅 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件&#xff0c;显存占用更小&#xff0c;是DAIN速度的10-25倍&#xff0c;包含抽帧处理&#xff0c;去除动漫卡顿感 项目地址: https://gitcode.com/gh_mir…

作者头像 李华
网站建设 2026/5/4 14:09:28

E7Helper:解放双手的第七史诗自动化助手终极指南

E7Helper&#xff1a;解放双手的第七史诗自动化助手终极指南 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签&#x1f343;&#xff0c;挂讨伐、后记、祭坛✌️&#xff0c;挂JJC等&#x1f4db;&#xff0c;多服务器支持&#x1f4fa;&#…

作者头像 李华
网站建设 2026/5/4 14:09:27

通过 curl 命令直接测试 Taotoken 聊天补全接口的响应

通过 curl 命令直接测试 Taotoken 聊天补全接口的响应 1. 准备工作 在开始测试 Taotoken 聊天补全接口前&#xff0c;需要确保已准备好以下内容&#xff1a; 有效的 Taotoken API Key&#xff0c;可在 Taotoken 控制台的「API 密钥」页面创建。目标模型 ID&#xff0c;可在 …

作者头像 李华
网站建设 2026/5/4 14:05:26

3分钟掌握BookGet:一键获取全球50+图书馆古籍资源的完整指南

3分钟掌握BookGet&#xff1a;一键获取全球50图书馆古籍资源的完整指南 【免费下载链接】bookget bookget 数字古籍图书下载工具 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 你是否曾梦想拥有一个私人数字古籍图书馆&#xff1f;想象一下&#xff0c;足不出户…

作者头像 李华
网站建设 2026/5/4 14:02:27

单片机是嵌入设备的“单芯片计算机”

短文标题&#xff1a;单片机是嵌入设备的“单芯片计算机”你有没有想过一个问题&#xff1a;手机、遥控器、智能手表、无人机……这些设备里的“大脑”是什么&#xff1f;是单片机。它的全称是单片微型计算机——把CPU、内存、Flash、各种外设&#xff08;定时器、ADC、USART&a…

作者头像 李华