当前位置: 首页 > news >正文

C语言实战2

C语言实战案例:文件操作与数据结构

案例目标:
实现一个学生信息管理系统,包含文件读写、链表操作和基本增删改查功能。

文件读写与链表结合

定义学生结构体并创建链表:

typedef struct Student { int id; char name[50]; float score; struct Student *next; } Student;

文件写入函数示例:

void saveToFile(Student *head, const char *filename) { FILE *file = fopen(filename, "w"); if (!file) return; Student *current = head; while (current != NULL) { fprintf(file, "%d %s %.2f\n", current->id, current->name, current->score); current = current->next; } fclose(file); }

动态内存管理

从文件加载数据到链表:

Student* loadFromFile(const char *filename) { FILE *file = fopen(filename, "r"); if (!file) return NULL; Student *head = NULL, *tail = NULL; while (!feof(file)) { Student *newNode = (Student*)malloc(sizeof(Student)); if (fscanf(file, "%d %s %f", &newNode->id, newNode->name, &newNode->score) == 3) { newNode->next = NULL; if (!head) head = newNode; else tail->next = newNode; tail = newNode; } else { free(newNode); break; } } fclose(file); return head; }

实用功能实现

链表插入与删除操作:

void insertStudent(Student **head, int id, const char *name, float score) { Student *newNode = (Student*)malloc(sizeof(Student)); newNode->id = id; strcpy(newNode->name, name); newNode->score = score; newNode->next = *head; *head = newNode; } void deleteStudent(Student **head, int id) { Student *temp = *head, *prev = NULL; while (temp != NULL && temp->id != id) { prev = temp; temp = temp->next; } if (temp == NULL) return; if (prev == NULL) *head = temp->next; else prev->next = temp->next; free(temp); }

高级应用示例

排序功能实现(冒泡排序):

void sortByScore(Student **head) { if (!*head || !(*head)->next) return; int swapped; Student *ptr1; Student *lptr = NULL; do { swapped = 0; ptr1 = *head; while (ptr1->next != lptr) { if (ptr1->score < ptr1->next->score) { // 交换数据域 Student temp = *ptr1; ptr1->id = ptr1->next->id; strcpy(ptr1->name, ptr1->next->name); ptr1->score = ptr1->next->score; ptr1->next->id = temp.id; strcpy(ptr1->next->name, temp.name); ptr1->next->score = temp.score; swapped = 1; } ptr1 = ptr1->next; } lptr = ptr1; } while (swapped); }

错误处理增强

增加文件操作安全检查:

Student* safeLoad(const char *filename) { FILE *file = fopen(filename, "r"); if (!file) { perror("Error opening file"); return NULL; } // ...(其余加载逻辑) if (ferror(file)) { perror("Error reading file"); clearerr(file); fclose(file); return NULL; } fclose(file); return head; }

该案例完整实现了文件持久化存储、动态内存管理、链表操作等核心功能,可作为C语言中级练习的典型范例。实际开发时可进一步扩展搜索功能、界面交互等模块。

http://www.rkmt.cn/news/87563.html

相关文章:

  • 计算机毕业设计springboot大连科技学院运动会管理系统 SpringBoot高校田径运动会综合管理平台基于 SpringBoot的校园体育赛事智能编排与成绩发布系统
  • 2025年红外热像仪行业五大实力厂商推荐,上海热像科技专业测 - myqiye
  • 破局出海新时代:石家庄企业借力外贸GEO优化,抢占全球市场先机! - 博客万
  • 2025年德国ELBE联轴器及驱动轴供应商年度排名:ELBE - mypinpai
  • 2025年上海五大靠谱移民机构排行榜,新测评精选知名的移民品 - mypinpai
  • 2025冷却塔降噪治理厂商TOP5权威推荐:甄选专业企业破解 - myqiye
  • 博客主题定制终极指南:3步打造专业级个人博客
  • 【IEEE、泰国曼谷】2026年电气工程、智能控制与人工智能国际学术会议(EEICAI 2026)
  • 鸿蒙Electron应用工程化与性能优化实战:从开发到上线全链路
  • 2025年船用铝合金舷梯源头厂家权威推荐榜单:船用铝合金舷梯/船用铝质舷梯/船用舷梯钢丝绳实力制造商精选 - 品牌推荐官
  • 2025工业设备噪音治理专业供应商TOP5权威推荐:甄选优质 - myqiye
  • AI历史与发展-AI发展的驱动因素和未来展望
  • 解决 keil 中flash download failed的问题
  • 深入解析dd命令:缓存与磁盘速度之谜
  • 靠谱的模板网站建设哪家好
  • 解锁VBA开发新境界:Rubberduck插件全面使用指南
  • 2025 ELBE驱动轴/十字轴供应TOP5权威推荐:原装进 - myqiye
  • SnapGene 6.0.2 安装教程
  • 2025年推荐一下紫檀摆件制造商排名,看看哪家口碑好 - 工业品牌热点
  • 84、深入探索 Linux 系统:网络安全、服务管理与系统运维全解析
  • 什么是品牌全案?
  • 解锁庭院新宠:挚锋铝业铝合金葡萄架
  • 2025老牌包装设计公司TOP5推荐:食用油包装设计口碑榜与 - 工业推荐榜
  • 数据结构:邻接矩阵
  • 本地 AI 服务难共享?TRAE SOLO+cpolar 轻松打破局域网枷锁
  • 2025年12月上海代理记账注册服务榜:首业财税,上海代理记账报税、上海代理记账税务咨询、上海代理记账税务筹划、上海代理记账纳税申报、覆盖全生命周期财税需求 - 海棠依旧大
  • 常压等离子表面处理机哪家口碑好/售后好/信誉好?怎么电话联系?推荐专业靠谱品牌厂家/供应商 - 品牌推荐大师1
  • ComfyUI-Florence2模型加载问题终极解决方案
  • Maestro测试脚本优化实战指南:三步提升UI自动化效率
  • FluidNC运动控制固件:重新定义ESP32 CNC设备的智能控制