[C++]競プロのためのファイル入出力

はじめに

ICPCなどの大会ではファイルを提出する必要があります。
この記事は、とりあえずファイルの入出力をやりたい人に対して書かれています。
なので、細かい説明はしません。

mac/linux の場合

一行で出来てしまいます。

$ ./a.out < input.txt > output.txt

実行可能ファイルに対して<, >でファイルを渡してあげれば良いです。
こうすることで標準入力(cin)にinput.txtの中身を渡せます。また、標準出力(cout)の内容がoutput.txtに書き込まれます。
いつも通りに解答を書けばokです。

Windowsの場合

Visual Studioをお使いの方などは、おそらく上の方法が使えないので真面目にfstreamを使います。
例として、ファイルから

n
x y
n
x y
...

の形式で整数が渡されて、n = 0 の時に入力の終了を表すような入力を受け取り、
出力にxとyの和をファイルに書き込むようなコードを示します。

#include <fstream>

//ファイル入出力
ifstream ifs("input.txt"); 
ofstream ofs("output.txt", ios::app);

void solve() {
    int x, y;
    ifs >> x >> y;

    int ret = x + y;
    ofs << ret << endl;
}

int main() {
    while(ifs >> n) {
        if(n == 0) break;
        solve();
    }
}

上の例を見れば分かる通り、cinの代わりにifscoutの代わりにofsとするだけで良いです。