C++ でファイルから Int を読み込む方法
胡金庫
2023年10月12日
-
C++ で
while
ループと>>
演算子を使用してファイルから Int を読み取る -
while
ループと>>
演算子とpush_back
メソッドを組み合わせてファイルから整数を読み込む -
ファイルから Int を読み込むために
while
ループとeof()
メソッドを使わない
この記事では、ファイルから 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;
著者: 胡金庫