GESP C++ 4 级 · 知识点

文件重定向与文件读写操作

GESP C++ 四级要求掌握用 freopen 做输入输出重定向和用文件流读写文本文件的方法。文件题的关键是打开模式与文件名:模式写错会清空数据,路径写错会读到空内容。

对应知识域:文件重定向与文件读写操作相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 理解重定向的作用:把标准输入输出接到文件,程序仍然用 cin 和 cout 读写。
  • 掌握 freopen 的用法,知道打开模式 r、w 的含义以及打开失败时要检查。
  • 了解 ifstream 与 ofstream 的基本用法,能逐行或逐个数据读写文本文件。
  • 理解文件读完的判断方式,避免多读一次或漏读最后一个数据。

典型题型

  • 补全 freopen 语句,使程序从指定文件读入、输出到指定文件。
  • 读入文件中的若干行文本并统计。
  • 判断文件打开失败时的表现。

常见错误

  • freopen 的路径写错导致读不到数据,程序读到的全是默认值。
  • 用 w 模式打开已有输入文件,把原内容清空。
  • 循环读取时判断方式不当,文件末尾多处理一次或漏掉最后一个数据。
  • 读写文件后忘记关闭,或者在同一程序中重复以写模式打开同一文件。

深入理解

两种做法:重定向与文件流

重定向只改一行代码,把 cin、cout 的流向换到文件上:

freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);

加在 main 开头即可,之后所有 cin、cout 自动读写文件,其余代码完全不用改。文件流则显式声明对象:

ifstream fin("in.txt");
ofstream fout("out.txt");
int x; fin >> x; fout << x;

两者的区别是重定向影响所有输入输出,文件流只影响自己那个对象,可以同时读写多个文件。

打开模式写错会清空数据

常用模式:"r" 只读、"w" 只写(文件存在时先清空)、"a" 追加、"r+" 读写。最危险的是 "w":本来想读一个已有文件,模式误写成 "w",打开的一瞬间内容就被清空了。

追加模式 "a" 是唯一不会破坏已有内容的写入方式。ofstream 默认就是 "w",ifstream 默认是 "r",忘了指定模式时要按默认值考虑。

读不到数据先查三处

文件读出来是空的或者全是默认值,按顺序查:文件名与路径是否正确(相对路径以程序运行目录为准,不是源文件所在目录)、打开模式是否匹配(想读却用了写模式)、文件是否真的存在。

稳妥的写法是打开后判断一下:if (!fin) { cout << "open failed"; return 1; }。另外,循环读文件常用 while (fin >> x),读到文件末尾时返回 false 自动停止,比用 eof() 少一次重复读取的错误。

自编例题

用 freopen 完成文件读写

编写程序从 data.in 读入 n 个整数求和,把结果写入 data.out。

freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
int n, x, sum = 0;
cin >> n;
for (int i = 0; i < n; i++) { cin >> x; sum += x; }
cout << sum << endl;

两条 freopen 语句把标准输入输出分别接到文件,之后程序里的 cin 和 cout 不需要任何修改,读写目标自动变成文件。打开模式 r 表示只读,文件必须已经存在;w 表示写入,文件不存在会新建,存在则清空。考试中会明确给出文件名,提交时要确认路径与文件名完全一致。重定向之后不能再从键盘读入,调试时要注意这一点。

相关真题

这块内容在整条路线里的位置:GESP C++ 4 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

重定向和文件流哪个更好?

重定向写法简单,适合只想改输入输出源的题目;文件流更灵活,可以同时打开多个文件,适合需要读写多个文件的场景。

freopen 打开失败怎么办?

会返回空指针,标准输入输出保持原状或不可用。应先检查文件是否存在、路径是否正确、权限是否足够。

文件读写要注意什么?

注意打开模式、文件名拼写和关闭操作;循环读取要正确处理文件末尾,避免多读一次或漏读最后一个数据。

本级别其他知识点

官方依据