LoginSignup
49
25

More than 5 years have passed since last update.

cin でテキストファイルから読み込み

Posted at

例えば下記オンラインのプログラミング問題では、基本的に標準入力からデータを読み取るために cin を多用します。
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0001&lang=jp

まず最初にこんな感じで回答コードを書くわけですが、

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
  vector<int> vec;

  // 標準入力から値を 10 個読み取る
  for(int i = 0; i < 10; ++i)
  {
    int n;
    cin >> n;
    vec.push_back(n);
  }

  // 降順ソート
  std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });

  // 大きい順に3つ出力
  for(int i = 0; i < 3; ++i) { cout << vec[i] << endl; }

  return 0;
}

果たしてこれが正しい回答なのか、手元のPCで色々な入力をテストしたいと思うことがたびたびあります。そんなとき、

  • 標準入力を毎回手で打つのはしんどいのでファイルから読み取らせたい
  • しかし提出するコードをあまり変えたくはない

という2つの要求でてきます。

コードを3行付け足すだけで cin の入力元を指定ファイルに変更できます。

// ...

// 追加1
#include <fstream>

int main()
{
  // 追加2, 以降 cin の入力元が 'input.txt' になる
  std::ifstream in("input.txt");
  std::cin.rdbuf(in.rdbuf());

  // ...
}

コードを提出するときには上の3行を削除するだけで OK です。

49
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
25