news 2026/6/23 22:40:54

C语言实战2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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语言中级练习的典型范例。实际开发时可进一步扩展搜索功能、界面交互等模块。

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

分布式应用框架Microsoft Orleans - 2、动手实践:构建你的第一个Microsoft Orleans应用程序

在上一章中,我们了解了Orleans的核心概念和价值。现在,让我们动手实践,一步步搭建开发环境,创建并运行一个简单的Orleans"Hello World"应用程序,获得第一手体验。 1. 环境准备与项目规划 在开始编码之前,我们需要确保开发环境就绪。你需要安装以下工具: .NE…

作者头像 李华
网站建设 2026/6/23 2:24:38

MAC电脑如何开发淘晶驰串口屏

Intel芯片版本&#xff1a; 1、安装Parallels Desktop虚拟机&#xff0c;在Parallels Desktop中安装win7、win10、win11。或者通过bootcamp安装windows系统 2、下载上位机并安装请参考 上位机下载 &#xff0c;在安装过程中根据提示自动安装相关环境 3、安装串口驱动&#x…

作者头像 李华
网站建设 2026/6/23 19:07:47

Java 中 new 一个对象的过程是怎么样的?

Java 中 new 一个对象 的过程是从字节码解析到内存分配、初始化、引用返回的完整链路&#xff0c;涉及 JVM 类加载、内存管理、构造方法执行等核心机制。以下按「JVM 层面的核心步骤」「代码层面的直观拆解」展开&#xff0c;兼顾底层原理和实际理解&#xff1a; 一、核心前提&…

作者头像 李华
网站建设 2026/6/23 12:14:37

从规则引擎到大模型:文档生成技术的十年进化与现在的最佳实践

文档生成技术并不是近两年才出现的&#xff0c;它经历了一个非常典型的“工程化 → 模板化 → 智能化”演变过程。 今天&#xff0c;随着 AI 的加速渗透&#xff0c;文档处理已经不再是“自动化办公软件”的范畴&#xff0c;而是一个完整的「内容生产技术栈」。 这篇文章&…

作者头像 李华
网站建设 2026/6/23 21:00:49

AI客户端终极指南:多平台支持与工作区管理快速上手

AI客户端终极指南&#xff1a;多平台支持与工作区管理快速上手 【免费下载链接】AIaW AI as Workspace - 精心设计的 AI (LLM) 客户端。 全功能&#xff0c;轻量级&#xff1b;支持多工作区、插件系统、跨平台、本地优先实时云同步、Artifacts 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/6/23 19:15:47

安全审查--跨站请求伪造--Fetch Metadata防护模式

安全Top10 https://cheatsheetseries.owasp.org/IndexTopTen.html---------------------------------------------------------------------------------------摘要&#xff1a;从小白开始逐层讲解Fetch Metadata一、从一个现代浏览器的困惑说起1.1 新时代的安全挑战想象一下这…

作者头像 李华