从文本文件读取到2d数组错误

时间:2017-10-14 18:58:12

标签: c++

我正在尝试将这些数据从文本文件读入我的2d数组。还有更多列,但下面的数据只是一小部分。我能够读到第一个数字" 5.1"但是大部分正在打印的内容都是垃圾后面的0。我的代码出了什么问题?

文本文件数据的一部分:

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;
}

1 个答案:

答案 0 :(得分:0)

您可以逐行读取数据,用空格替换逗号。使用std::stringstream将行转换为流,并读取双值。

>>运算符在到达流末尾时将失败。你必须在那时打破循环。

您应该使用<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;
}