我有一个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> y
和vector<double> z
。
我还阅读了对类似问题的其他答复,例如this和this。但是,它们没有解决将数据从不同的列存储到不同的向量的问题。
以下是我目前的尝试:
#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。我的猜测是我在第一个循环中填充向量的方式有问题,但是我看不到错误在哪里。
我将不胜感激。谢谢!
答案 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_);
}