• 締切済み

C++のファイルに対する配列データの読み書き

C++で配列c[0],c[1],....の値をファイルに出力すると、 1.2 3.2 5.1 8.2 -9.1 のようになると思います(この例は配列のサイズが5)。実際は100以上の配列にします。 プログラム的にはだいたい下のようになると思っています。 std::ofstream ofs( "test.txt" ); ofs << ここで並びの出力をするはず? << std::endl; 意味は、出力ファイルの定義とストリームによる書き出し?と改行だと思います。 並びの出力ですから、ループでよいのでしょうか。プログラム作法が分からないので教えて頂きたいのですが。データの区切りは空白で、できれば書く数値のフォーマットは揃えたいですが。 次に、読み込むときはどうなるでしょうか。 std::ifstream ifs( "test.txt" ); std::string str; ifs >> str; std::cout << str << std::endl; これだと読んだデータを画面表示して終わりです。配列に読み込む方法なのですが。 よろしくお願いします。

みんなの回答

回答No.2

書いて読むサンプル: #include <iostream> #include <fstream> #include <iterator> int main() { using namespace std; const int N0 = 5; // 配列c0の要素数 float c0[N0] = { 1.2f, 3.2f, 5.1f, 8.2f, -9.1f }; // c0[] をファイルに書く(空白区切り) copy(begin(c0), end(c0), ostream_iterator<float>(ofstream("test.txt"), " ")); int N1; float c1[10]; // 余裕をもって大きめの配列 // ファイルからc1[]に読み込む float* last = copy(istream_iterator<float>(ifstream("test.txt")), istream_iterator<float>(), c1); N1 = distance(c1, last); // 読み込んだ要素数 cout << N1 << " floats." << endl; for ( int i = 0; i < N1; ++i ) cout << c1[i] << ' '; cout << endl; return 0; }

回答No.1

#include <iostream> #include <fstream> vector<int> に読みこむならこんな。 #include <iterator> #include <vector> using namespace std; int main(){ vector<int> c(istream_iterator<int>(ifstream("test.txt")), istream_iterator<int>()); for ( auto item : c ) { cout << item << ' '; } // 読めたかな? }

関連するQ&A