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

下期预告

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

相关推荐
三品吉他手会点灯21 分钟前
C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
c语言·开发语言·笔记·学习
在放️3 小时前
Python 爬虫 · 第三方代理接入与合规使用
开发语言·爬虫·python
KANGBboy3 小时前
java知识五(继承)
java·开发语言
c++之路3 小时前
Bazel C++ 构建系列文档(三):构建第一个 C++ 项目
开发语言·c++
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试
十月的皮皮4 小时前
C语言学习笔记20260615-有序升序序列合并
c语言·笔记·学习
聚名网5 小时前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php
牛油果子哥q5 小时前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
foundbug9995 小时前
直流电机 PID 速度控制 MATLAB 仿真程序
开发语言·matlab
Tian_Hang6 小时前
C++原型模式(Protype)
开发语言·c++·算法