C++ でファイルから Int を読み込む方法

胡金庫 2023年10月12日
  1. C++ で while ループと >> 演算子を使用してファイルから Int を読み取る
  2. while ループと >> 演算子と push_back メソッドを組み合わせてファイルから整数を読み込む
  3. ファイルから Int を読み込むために while ループと eof() メソッドを使わない
C++ でファイルから Int を読み込む方法

この記事では、ファイルから int データを読み込む方法について、いくつかの C++ メソッドを説明します。

以下のサンプルプログラムでは、input.txt という名前のテキストファイルを想定しています。各サンプルコードでは、このファイル名が実際のファイルストリームに関連付けられているかどうかをチェックし、エラーが発生した場合には対応する失敗メッセージを表示します。ことに注意してください。

  • input.txt の内容:
123 178 1289 39 90 89 267 909 23 154 377 34 974 322

C++ で while ループと >> 演算子を使用してファイルから Int を読み取る

このメソッドでは、while ループを使って EOF(ファイルの終端)に達するまで繰り返し処理を行い、各整数を数値変数に格納します。そして、ループ本体で各数値をコンソールに出力します。

#include <fstream>
#include <iostream>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;

int main() {
  string filename("input.txt");
  int number;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (input_file >> number) {
    cout << number << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

出力:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

while ループと >> 演算子と push_back メソッドを組み合わせてファイルから整数を読み込む

別の方法として、ファイルから各整数を取得し、先ほどの例のように数値変数に格納し、それを反復するたびに int ベクトルにプッシュすることもできます。このシナリオでは、格納されたベクトル数の要素を操作する必要がある、より実用的なシステムを模倣するために for ループが含まれていることに注意してください。

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<int> numbers;
  int number;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (input_file >> number) {
    numbers.push_back(number);
  }

  for (const auto &i : numbers) {
    cout << i << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

出力:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

ファイルから Int を読み込むために while ループと eof() メソッドを使わない

メンバ関数 eof()while ループ条件として利用して同じ問題にアプローチすることも考えられます。残念ながら、これは余計な繰り返しにつながるかもしれません。関数 eof()eofbit が設定されている場合にのみ真を返すので、初期化されていないものが変更されるという繰り返しになる可能性があります。このシナリオは以下のコードサンプルで示されています。

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<int> numbers;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (!input_file.eof()) {
    int tmp;
    input_file >> tmp;
    numbers.push_back(tmp);
  }

  for (const auto &i : numbers) {
    cout << i << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

出力:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ File