C语言新手必看:用fopen和fprintf手把手教你读写CSV文件(附完整代码)
📅 2026/6/30 23:12:32
👁️ 次浏览
C语言新手必看用fopen和fprintf手把手教你读写CSV文件附完整代码刚接触C语言的文件操作时很多新手会遇到这样的困惑程序运行时的数据如何保存到文件中又该如何从文件中读取数据CSV文件作为一种简单通用的数据格式是入门文件操作的绝佳起点。本文将用最直白的语言带你一步步实现CSV文件的读写操作。1. 准备工作理解CSV与文件操作基础CSVComma-Separated Values文件本质上是一个纯文本文件用逗号分隔不同字段。例如一个学生信息的CSV可能长这样Name,Age,Score 张三,18,95 李四,19,88在C语言中我们主要通过stdio.h头文件提供的函数进行文件操作。核心函数包括fopen()打开文件返回文件指针fprintf()向文件写入格式化数据fscanf()从文件读取格式化数据fclose()关闭文件新手常见误区忘记检查文件是否成功打开这会导致后续操作全部失败。2. 写入CSV文件从零开始创建数据文件让我们先实现一个将学生信息写入CSV的程序。完整代码如下#include stdio.h int main() { // 1. 声明文件指针 FILE *file; // 2. 打开文件写入模式 file fopen(students.csv, w); if (file NULL) { printf(无法创建文件\n); return 1; } // 3. 写入表头 fprintf(file, Name,Age,Score\n); // 4. 写入数据行 fprintf(file, 张三,18,95\n); fprintf(file, 李四,19,88\n); // 5. 关闭文件 fclose(file); printf(数据已成功写入students.csv\n); return 0; }关键点解析文件模式选择w写入模式会创建新文件或覆盖已有文件a追加模式在文件末尾添加内容错误处理每次fopen后都应检查返回值是否为NULL文件路径可以是相对路径或绝对路径数据格式每行末尾需要加\n换行符字段间用逗号分隔3. 读取CSV文件解析结构化数据现在我们来读取刚才创建的CSV文件。完整示例#include stdio.h #include string.h int main() { FILE *file; char line[100]; file fopen(students.csv, r); if (file NULL) { printf(文件打开失败\n); return 1; } // 跳过表头 fgets(line, sizeof(line), file); printf(学生信息列表\n); while (fgets(line, sizeof(line), file)) { // 移除行末的换行符 line[strcspn(line, \n)] \0; // 使用strtok分割字符串 char *name strtok(line, ,); char *age strtok(NULL, ,); char *score strtok(NULL, ,); printf(姓名%s年龄%s分数%s\n, name, age, score); } fclose(file); return 0; }技术细节说明fgets()逐行读取文件内容strtok()字符串分割函数第一个参数为待分割字符串后续调用传NULLstrcspn()计算不包含指定字符的初始段长度实际项目中应考虑使用更健壮的CSV解析方法比如处理字段中的逗号、引号等特殊情况。4. 实战技巧与常见问题排查4.1 文件路径问题相对路径的基准是程序运行时的当前工作目录。为避免混淆可以使用绝对路径file fopen(/home/user/data/students.csv, r);或者在程序开始时获取当前路径char cwd[1024]; getcwd(cwd, sizeof(cwd)); printf(当前工作目录%s\n, cwd);4.2 处理中文编码如果CSV包含中文需要注意确保文件以UTF-8编码保存Windows系统可能需要处理BOM头4.3 内存安全最佳实践总是检查数组边界#define MAX_LINE 1024 char line[MAX_LINE]; fgets(line, MAX_LINE, file);使用安全的字符串函数strncpy(dest, src, sizeof(dest)-1); dest[sizeof(dest)-1] \0;4.4 性能优化建议处理大文件时避免频繁的小块读写考虑使用内存映射文件批量处理数据而非逐行处理5. 扩展应用构建简易学生管理系统结合文件操作我们可以实现一个完整的学生信息管理系统框架#include stdio.h #include string.h typedef struct { char name[50]; int age; float score; } Student; void addStudent(FILE *file) { Student s; printf(输入学生姓名); scanf(%s, s.name); printf(输入学生年龄); scanf(%d, s.age); printf(输入学生分数); scanf(%f, s.score); fprintf(file, %s,%d,%.2f\n, s.name, s.age, s.score); } int main() { FILE *file fopen(students_db.csv, a); if (!file) { printf(数据库打开失败\n); return 1; } int choice; do { printf(\n学生管理系统\n); printf(1. 添加学生\n); printf(2. 列出所有学生\n); printf(0. 退出\n); printf(请选择); scanf(%d, choice); switch(choice) { case 1: addStudent(file); break; case 2: // 列出学生实现类似前面的读取代码 break; } } while (choice ! 0); fclose(file); return 0; }这个示例展示了如何将文件操作应用到实际项目中。通过这个框架你可以继续扩展查询、修改等功能。
「6S管理实战专栏」 第18篇 极致利他、诚意正心,用 6S 的力量,让 10 万名朋友实现高效、愉悦的工作与生活。一、制造业普遍痛点:6S整改陷入循环反弹走访珠三角大量机械、钣金加工制造企业,发现一个共性管理难题:企业投…
📅 2026/6/30 23:12:32
试一件事。打开你常用的AI工具,问一句:“XX行业推荐哪家公司?”
它会给你三个名字。这三个名字的筛选逻辑,跟搜索引擎完全不同——AI不是按关键词排名给的,是按"信息可验证程度"给的。
你的公司不在里面&…
📅 2026/6/30 23:10:32
前几天,一位做AI产品的老板找到我。
他说: “我们的产品已经上线半年了,用户也有几万人了,现在有投资人尽调,对方法务突然问我们:‘你们算法备案做了吗?’” 办公室一下子安静了。整个团队面面…
📅 2026/6/30 23:10:32
前沿技术介绍:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,属于“物理AI” 领域的一种全新技术形态,完成了从“虚拟世界”到“…
📅 2026/7/1 0:16:43
BetterNCM安装器终极指南:3分钟解锁网易云音乐的无限可能 🚀 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer
你是否觉得网易云音乐的功能太过单一?是…
📅 2026/7/1 0:16:43
摄影作品批量水印神器:semi-utils让你的照片瞬间专业起来 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具,后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils
还在为摄影作品添加水印而烦恼…
📅 2026/7/1 0:16:43
前言:承接上一篇进程创建与 fork 核心机制,本篇深入讲解进程生命周期的后半段:进程退出、资源回收、程序替换,以及面试高频的孤儿 / 僵尸进程问题。掌握这些内容,才能完整管控进程的全生命周期,写出稳定的多…
📅 2026/7/1 0:16:43
phytium-kernel性能调优手册:飞腾处理器内核参数优化与性能测试终极指南 【免费下载链接】phytium-kernel It provides openEuler kernel source for Phytium SoCs 项目地址: https://gitcode.com/openeuler/phytium-kernel
前往项目官网免费下载:…
📅 2026/7/1 0:14:43
RT-Thread多线程通信实战:消息队列与信号量的高效协作模式在嵌入式实时系统中,多线程间的数据传递与资源同步是开发者的必修课。当传感器数据采集线程需要将实时读数传递给数据处理线程,而两者运行频率又不一致时,如何确保数据不丢…
📅 2026/7/1 0:14:43
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/6/30 10:04:37
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/6/30 6:54:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39