7. 文件

对局录像就是“文件”;打开、读写、关闭就像操作录像。本节对应考纲 7。

这一章在学什么

程序里的数据可以存到文件里(比如存到硬盘上的一个 txt),下次运行再读出来。这一章考纲以了解为主:知道怎么用 fopen 打开、fclose 关闭、fprintf / fscanf 读写即可。

文件操作一般在本地环境(如 Dev-C++)才能完整运行,本页练习区只做简单演示;想练写文件可以在本机试。

本节考纲要点

本节代码里的英文词

文件的定义与分类

什么是文件

文件是存在磁盘等“外面”的数据,程序关掉后还在。就像对局录像存成文件,下次还能打开看。

文本文件与二进制文件

分类:文本文件(用记事本能打开,看到的是字符)和二进制文件(存的是二进制数据,如图片、程序生成的数据)。考纲以了解为主。

打开与关闭

fopen 与 fclose

fopen(文件名, 模式) 打开文件,用 fclose(fp) 关闭。打开后得到一个文件指针(常写成 FILE *fp),后面读、写都用这个 fp。

常用打开模式

常用打开模式:"r" 只读(文件要已存在);"w" 只写(没有就新建,有就清空);"a" 追加(在文件末尾接着写)。

打开可能失败(如文件不存在时用 "r"),所以一般先判断 fp != NULL 再读写,用完后一定要 fclose(fp)

FILE *fp = fopen("replay.txt", "r");  /* 以只读方式打开 replay.txt */
if (fp != NULL) {
    /* 这里用 fp 读或写 */
    fclose(fp);   /* 用完关闭 */
}

顺序读写(了解)

fprintf 与 fscanf

打开后从头往后按顺序读或写:fprintf(fp, ...) 像 printf 一样往文件里写内容;fscanf(fp, ...) 像 scanf 一样从文件里读。例如:fprintf(fp, "%d %d\n", hero_hp, gold); 把血量和金币写入文件;fscanf(fp, "%d", &x); 从文件读一个整数到 x。

随机读写(了解)

fseek 是什么

fseek 可以把“读写位置”移到文件中间某处,再读或写,叫随机访问。类比:录像拖到某一分钟再播。考纲为了解。

本章总示例(含 main)

本章讲的是文件操作(fopen、fclose、fprintf、fscanf 等),需在本机或在线环境运行。下面是一段完整可运行的 main 程序,在线运行只会输出提示;要练习写文件请在本机用 Dev-C++ 等打开并运行。

#include <stdio.h>
int main() {
    printf("文件节:请在本地用 fopen 写文件\n");
    return 0;
}

下面练习区已预填了这段代码,可修改后点击「运行」;若要在本机写文件,可仿照前文 fopen、fprintf 示例扩展。

练习区域

提示:注释可以暂时不写。本节以“了解”为主,文件操作需在本地或在线环境运行。下面给一个顺序结构小练习,你可以在本机尝试用 fopen、fprintf 写文件。

运行结果:

(点击「运行」后显示在这里)

易错知识(避免踩坑)

小结