使用C ++从.txt文件读取数据并保存到多个向量中

时间:2018-07-30 07:49:52

标签: c++ stdvector

我有一个data.txt文件,其中包含以下数据:

1.0 0.5 1.5 0.01761
2.0 1.5 2.5 0.01977
3.0 2.5 3.5 0.02185

我正在尝试读取data.txt文件,并将数字分别存储在不同的向量中。例如,最左边一列的1.0、2.0和3.0将进入vector<double> w,第二列中的0.5、1.5和2.5将进入vector<double> x。其余两列将分别进入vector<double> yvector<double> z

我还阅读了对类似问题的其他答复,例如thisthis。但是,它们没有解决将数据从不同的列存储到不同的向量的问题。

以下是我目前的尝试:

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace::std;

int main()
{
    FILE *f_read;
    double my_variable = 0;
    vector<double> w, x, y, z;
    f_read= fopen("data.txt", "r");

    for(int i = 0; i <= 3; ++i)
    {
        fscanf(f_read, "%.lf", &my_variable);
        w[i] = my_variable;
        fscanf(f_read, "%.lf", &my_variable);
        x[i] = my_variable;
        fscanf(f_read, "%.lf", &my_variable);
        y[i] = my_variable;
        fscanf(f_read, "%.lf", &my_variable);
        z[i] = my_variable;
    }

    //the following loop is printed to verify the vectors are correctly filled
    for(int j = 0; j <=3; ++j)
    {
        cout << "The " << j << "th value in w is " << w[j] << endl;
        cout << "The " << j << "th value in x is " << x[j] << endl; 
        cout << "The " << j << "th value in y is " << y[j] << endl;
        cout << "The " << j << "th value in z is " << z[j] << endl;
    }
return 0;
}

但是,最后一个“ for”循环从未被打印过,该程序返回-1073741819。我的猜测是我在第一个循环中填充向量的方式有问题,但是我看不到错误在哪里。

我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您正在访问vector末尾,它们都为空。当您知道要处理的行数时,可以使用正确的大小对其进行初始化。

然后您可以直接阅读vector的元素

#include <iostream>
#include <vector>

int main()
{
    std::vector<double> w(3), x(3), y(3), z(3);
    std::ifstream f_read("data.txt");

    for(int i = 0; i < 3; ++i)
    {
        f_read >> w[i] >> x[i] >> y[i] >> z[i];
    }
    return 0;
}

如果相反,您不知道行数,则可以读入值和push_back

    for(double w_, x_, y_, z_; f_read >> w_ >> x_ >> y_ >> z_; )
    {
        w.push_back(w_);
        x.push_back(x_);
        y.push_back(y_);
        z.push_back(z_);
    }