C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化

大家好,我是网域小星球。

前面我们写的程序,数据都是存在内存里的,程序一关数据就没了。想要让数据永久保存 ,比如把学生成绩、个人信息存到文件里,下次打开还能读取,就必须用到文件操作

本篇从文件基础、打开关闭、读写方式到综合实战完整讲解,全程 VS2022 可直接运行,零基础也能轻松学会。

目录

一、本章学习目标

二、文件操作基础

[1. 什么是文件?](#1. 什么是文件?)

[2. 文件操作核心步骤](#2. 文件操作核心步骤)

[3. 文件指针](#3. 文件指针)

三、文件打开与关闭

[1. 打开文件 fopen](#1. 打开文件 fopen)

[2. 关闭文件 fclose](#2. 关闭文件 fclose)

[3. 判断文件是否打开成功](#3. 判断文件是否打开成功)

四、文件常用读写函数

[1. 格式化写入 fprintf](#1. 格式化写入 fprintf)

[2. 格式化读取 fscanf](#2. 格式化读取 fscanf)

五、基础示例:写入文件

六、基础示例:读取文件

七、综合实战:学生信息保存到文件

八、高频易错点

九、本章核心总结

下期预告

一、本章学习目标

学完本篇你将彻底掌握:

  1. 文件的基本概念与文件路径
  2. 文件操作的标准流程:打开 → 读写 → 关闭
  3. 文件打开模式:r、w、a、r+、w+、a+
  4. 字符读写、字符串读写、格式化读写
  5. 文件判断与错误处理
  6. 综合实战:把学生信息保存到文件并读取

二、文件操作基础

1. 什么是文件?

存放在硬盘上的数据集合,比如:

  • 文本文件:.txt .c .h
  • 二进制文件:.exe .jpg .doc

入门阶段我们只学文本文件

2. 文件操作核心步骤

  1. 打开文件 fopen
  2. 读写文件 fscanf / fprintf / fgets / fputs
  3. 关闭文件 fclose

3. 文件指针

C 语言用 FILE* 代表一个文件:

cpp 复制代码
FILE *fp;

三、文件打开与关闭

1. 打开文件 fopen

cpp 复制代码
FILE *fp = fopen("文件路径", "打开模式");

常用模式:

  • r:只读(文件必须存在)
  • w:只写(文件不存在则创建,存在则清空)
  • a:追加(文件不存在则创建,存在则在末尾添加)
  • r+:可读可写
  • w+:可读可写(清空原有内容)
  • a+:可读可写(追加)

2. 关闭文件 fclose

cpp 复制代码
fclose(fp);

一定要关闭,否则可能数据丢失。

3. 判断文件是否打开成功

cpp 复制代码
if (fp == NULL) {
    printf("打开失败!");
    return 0;
}

四、文件常用读写函数

1. 格式化写入 fprintf

类似 printf,只是写入文件:

cpp 复制代码
fprintf(fp, "学号:%d 姓名:%s 成绩:%.1f\n", id, name, score);

2. 格式化读取 fscanf

类似 scanf,从文件读:

cpp 复制代码
fscanf(fp, "%d%s%f", &id, name, &score);
  1. 字符串写入 fputs
cpp 复制代码
fputs("hello world", fp);
  1. 字符串读取 fgets
cpp 复制代码
char buf[100];
fgets(buf, 100, fp);
  1. 判断文件结束 feof
cpp 复制代码
while (!feof(fp)) { ... }

五、基础示例:写入文件

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
    FILE *fp = fopen("test.txt", "w");

    if (fp == NULL)
    {
        printf("文件打开失败\n");
        return 0;
    }

    fprintf(fp, "姓名:小明\n");
    fprintf(fp, "年龄:18\n");
    fprintf(fp, "成绩:95.5\n");

    fclose(fp);
    printf("写入成功\n");
    return 0;
}

运行后项目目录会出现 test.txt


六、基础示例:读取文件

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
    FILE *fp = fopen("test.txt", "r");

    if (fp == NULL)
    {
        printf("文件不存在\n");
        return 0;
    }

    char buf[100];
    while (fgets(buf, 100, fp) != NULL)
    {
        printf("%s", buf);
    }

    fclose(fp);
    return 0;
}

七、综合实战:学生信息保存到文件

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct Student
{
    int id;
    char name[20];
    float score;
};

int main()
{
    struct Student stus[2] = {
        {1001, "zhangsan", 90.5},
        {1002, "lisi", 88.0}
    };

    // 写入文件
    FILE *fp = fopen("student.txt", "w");
    if (fp == NULL) return 0;

    for (int i = 0; i < 2; i++)
    {
        fprintf(fp, "%d %s %.1f\n", stus[i].id, stus[i].name, stus[i].score);
    }
    fclose(fp);
    printf("写入成功\n");

    // 读取文件
    fp = fopen("student.txt", "r");
    printf("\n读取结果:\n");
    int id;
    char name[20];
    float score;
    while (fscanf(fp, "%d%s%f", &id, name, &score) != EOF)
    {
        printf("%d %s %.1f\n", id, name, score);
    }

    fclose(fp);
    return 0;
}

八、高频易错点

  1. 文件打开后忘记关闭 fclose
  2. r 模式打开不存在的文件
  3. w 模式误清空原有数据
  4. 文件路径写错导致打开失败
  5. 读取格式与写入格式不匹配
  6. 循环读取时未判断 EOF 导致死循环

九、本章核心总结

  1. 文件操作流程:打开 → 读写 → 关闭
  2. FILE* 是文件标识
  3. 常用模式:r 读、w 写、a 追加
  4. 格式化读写:fprintf / fscanf
  5. 字符串读写:fputs / fgets
  6. 文件操作让数据实现持久化保存

下期预告

下一篇是用前面所有知识做一个完整小项目:增、删、查、看、保存到文件,实现真正可运行的系统。

相关推荐
en.en..38 分钟前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
2601_9669496544 分钟前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962296511 小时前
湖南码界领航教育科技有限公司:Python自动化,核心优势
文件操作·python自动化·文本处理·实战场景·核心优势
点心的游戏开发世界2 小时前
GDScript 入门笔记:目录
开发语言·笔记·游戏引擎·godot
洋不写bug2 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
果果燕2 小时前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php
平头哥技术团队2 小时前
Day 16 | 用 ul、ol、li 一个标签,把散资料收成有序的技能清单页
开发语言·前端·html·html5
统计学小王子2 小时前
数学建模国赛倒计时 2 天 ——《统计模型精讲(广义线性模型 R 语言实例 + 分析)》
开发语言·数学建模·r语言
此冬歌咏3 小时前
自动化服务器运维监控系统(python+shell)
linux·运维·服务器·开发语言·python·自动化
Cx330❀3 小时前
【Linux网络】深入TCP协议:从滑动窗口到拥塞控制与性能优化全景解析
linux·开发语言·网络·tcp/ip·ai·性能优化·ai编程