Xcode
で入出力ファイルのリダイレクト
を行いたい場面に遭遇し,試行錯誤しているうちにできるようになったので,ここに手順を書き留めておきます.
どなたかのお役に立てれば幸いです.
1. 作業用ディレクトリと入出力ファイルの準備
今回は/Users/ashipan/Redirection
のディレクトリ内にmain.cpp
, input.txt
, output.txt
ファイルがあるとして作業を進めていきます.
ディレクトリ構成やファイル名は自分の環境に合わせて読み替えて進んでください.
今回行いたいリダイレクト
は以下のようなものです.(a.out
は実行ファイル)
./a.out < input.txt > output.txt
2. Working Directory の設定
Xcode
のメニューバーから Product
> Scheme
> Edit Scheme
を選択します.左のRun
と右のOptions
を選択してUse custom working directory
を選択し, working directory
に入出力ファイルがある場所(Users/ashipan/Redirection
)を指定します.
3. プログラムの実行
input.txt
に入力される値,main.cpp
にその入力から所望の出力を得るプログラムを書きプログラムを実行します.
input.txt
から入力を得るにはmain
関数の冒頭に以下の記述を行ってください.
freopen("input.txt", "r", stdin);
また,output.txt
に出力したい場合は同様に以下の記述を行ってください.
freopen("output.txt", "w", stdout);
macOS
でコンパイルを行う場合は以下のように書くこともできます.
#ifdef __APPLE__
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
以下にinput.txt
とmain.cpp
のサンプルプログラムを置いておきます.
3
1 2 3
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("input.txt", "r", stdin); // Input Redirection
freopen("output.txt", "w", stdout); // Output Redirection
/* if you are compiling on macOS, you can instead write as follows
#ifdef __APPLE__
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
*/
// n個の整数を読み取りその合計を出力
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
cout << accumulate(a.begin(), a.end(), 0) << endl;
return 0;
}
4. 実行結果の確認
プログラムの出力内容はoutput.txt
に記録されます.
以下のoutput.txt
は入力ファイルであるinput.txt
に対してmain.cpp
を実行した結果です.
6
5. 終わりに
これでXcode
でリダイレクト
ができるようになったと思います.
また,main.cpp
内のbits/stdc++.h
が気になった方はこちらの記事を参考にしてください.
Xcodeでbits/stdc++.hをインクルード