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

下期预告

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

相关推荐
网域小星球2 小时前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组
Jia ming2 小时前
C语言实现日期天数计算
c语言·开发语言·算法
xh didida2 小时前
C++ -- string
开发语言·c++·stl·sring
lly2024062 小时前
Bootstrap 折叠组件详解
开发语言
无限进步_2 小时前
【C++&string】大数相乘算法详解:从字符串加法到乘法实现
java·开发语言·c++·git·算法·github·visual studio
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
模板template
开发语言·c++
大邳草民3 小时前
Python 中 global 与 nonlocal 的语义与机制
开发语言·笔记·python
charlie1145141913 小时前
通用GUI编程技术——图形渲染实战(二十九)——Direct2D架构与资源体系:GPU加速2D渲染入门
开发语言·c++·学习·架构·图形渲染·win32
历程里程碑3 小时前
二叉树---二叉树的中序遍历
java·大数据·开发语言·elasticsearch·链表·搜索引擎·lua