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. 文件操作让数据实现持久化保存

下期预告

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

相关推荐
JAVA面经实录9179 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
周杰伦fans10 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
Bat U12 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰12 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商12 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
foundbug99913 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
XDH_CS13 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界13 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵14 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python