2017-10-14 56 views
0

このデータをテキストファイルから2次元配列に読み込もうとしています。さらに多くの列がありますが、以下のデータはほんの一部です。私は最初の数字 "5.1"を読むことができますが、印刷されているものの大半はごみの後ろに0が続きます。私のコードで何が間違っていますか?テキストファイルのデータのテキストファイルから2次元配列エラーへの読み込み

部:

5.1,3.5,1.4,0.2

4.7,3.2,1.3,0.2

4.6,3.1,1.5,0.2

5.0、 3.6,1.4,0.2

5.4,3.9,1.7,0.4

if (!fin) 
{ 
    cout << "File not found! " << endl; 
} 

const int SIZE = 147; 

string data[SIZE]; 

double data_set[SIZE][4]; 


for (int i = 0; i < SIZE; i++) 
{ 
    for (int j = 0; j < 4; j++) 
     fin >> data_set[i][j]; 
} 

for (int i = 0; i < SIZE; i++) 
{ 
    for (int j = 0; j < 4; j++) 
     cout << data_set[i][j] << " "; 
     cout << endl; 
} 
+0

ファイル内の値はコンマで区切られています。あなたは各行を読み、コンマで分割する必要があります。 –

+0

これは多くの複製です。 "C++ read file 2d array"のStackOverflowを検索します。常に最初に検索し、正しく投稿するよりもずっと速く、1つ以上の返信を待っています*。 –

+1

コンパイル時にデータのサイズがわかっている場合にのみ、ファイルの読み込みに 'for'ループを使用してください。実行時にデータ量が決まる場合は 'while'と' std :: vector'を使います。 –

答えて

0

データを1行ずつ読み込み、コンマを空白のスペースに置き換えることができます。 std::stringstreamを使用してラインをストリームに変換し、double値を読み込みます。

ストリーム>>ストリームは、ストリームの最後に到達すると失敗します。その時点でループを解除する必要があります。

固定サイズの2-Dアレイの代わりに<vector<vector<double>> dataを使用する必要があります。

#include <iostream> 
#include <string> 
#include <vector> 
#include <fstream> 
#include <sstream> 

... 
string line; 
int row = 0; 
while(fin >> line) 
{ 
    for(auto &c : line) if(c == ',') c = ' '; 
    stringstream ss(line); 

    int col = 0; 
    while(ss >> data_set[row][col]) 
    { 
     col++; 
     if (col == 4) break; 
    } 
    row++; 
    if (row == SIZE) break;//or use std::vector 
} 

for (int i = 0; i < row; i++) 
{ 
    for (int j = 0; j < 4; j++) 
     cout << data_set[i][j] << " "; 
    cout << endl; 
} 
関連する問題