Level 1 · Day 11

文件操作与异常处理

把数据存到硬盘、读回来;用 try/catch 优雅地应对出错。(时间复杂度见专题)

一、文件流三件套

ifstream

输入文件流 —— 文件,用法同 cin

ofstream

输出文件流 —— 文件,用法同 cout

竞赛最省事:freopen 重定向
freopen("in.txt", "r", stdin);    // 之后 cin/scanf 从文件读
freopen("out.txt", "w", stdout);  // 之后 cout/printf 写到文件

二、互动演示:try / catch 怎么接住错误

模拟一段除法。点“正常输入”和“除数为 0”,看程序走哪条路 —— 出错时不崩溃,被 catch 接住。

try { 读入 a, b
  if (b == 0) throw "除数为 0";
  cout << a / b; // 正常输出
} catch (msg) { cout << "出错:" << msg; }

三、参考代码

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 写文件
    ofstream fout("out.txt");
    fout << "Hello" << endl;
    fout.close();

    // 读文件
    ifstream fin("in.txt");
    int x; fin >> x;
    fin.close();

    // 异常处理
    int a = 6, b = 0;
    try {
        if (b == 0) throw "除数不能为 0";
        cout << a / b;
    } catch (const char* msg) {
        cout << "出错了:" << msg;
    }
    return 0;
}

try 包住可能出错的代码,throw 抛出,catch 接住 —— 程序不至于直接崩溃。