C++ 不会从 .txt 文件中读取科学记数法数据
C++ won't read in scientific notation data from a .txt file
我正在编写一个程序,它从一个文本文件中读取一个数组,该文件既有普通整数,也有多个科学计数法的数字,形式为:#.#####E##。以下是输入 .txt 文件的几行样例:
21 -1 0 0 501 502 0.00000000000E+00 0.00000000000E+00 0.17700026409E+03 0.17700026409E+03 0.00000000000E+00 0. -1.
21 -1 0 0 502 503 0.00000000000E+00 0.00000000000E+00 -0.45779372796E+03 0.45779372796E+03 0.00000000000E+00 0. 1.
6 1 1 2 501 0 -0.13244216743E+03 -0.16326397666E+03 -0.47746002227E+02 0.27641406353E+03 0.17300000000E+03 0. -1.
-6 1 1 2 0 503 0.13244216743E+03 0.16326397666E+03 -0.23304746164E+03 0.35837992852E+03 0.17300000000E+03 0. 1.
这是我的程序,它简单地读取文本文件并将其放入一个数组(或更具体地说,一个向量的向量):
vector <float> vec; //define vector for final table for histogram.
string lines;
vector<vector<float> > data; //define data "array" (vector of vectors)
ifstream infile("final.txt"); //read in text file
while (getline(infile, lines))
{
data.push_back(vector<float>());
istringstream ss(lines);
int value;
while (ss >> value)
{
data.back().push_back(value); //enter data from text file into array
}
}
for (int y = 0; y < data.size(); y++)
{
for (int x = 0; x < data[y].size(); x++)
{
cout<<data[y][x]<< " ";
}
cout << endl;
}
// Outputs the array to make sure it works.
现在,此代码对于文本文件的前 6 列(这些列完全是整数)运行良好,但随后它会完全忽略第 6 列及更高列(这些列包含科学记数法)。
我已经尝试将向量重新定义为双精度和浮点类型,但它仍然做同样的事情。如何让 C++ 识别科学记数法?
提前致谢!
将 int value;
更改为 double value;
并将向量更改为 double 而不是 int。
更好的是,因为你有三个声明必须全部同步到正确的类型,所以为该类型创建一个别名,如下所示:using DATA_TYPE = double;
然后声明你的向量,如下所示:vector<vector<DATA_TYPE> > data;
, DATA_TYPE value;
, 等等。这样一来,无论出于何种原因更改数据类型,所有向量和变量声明都将自动更新,从而避免此类错误。
我正在编写一个程序,它从一个文本文件中读取一个数组,该文件既有普通整数,也有多个科学计数法的数字,形式为:#.#####E##。以下是输入 .txt 文件的几行样例:
21 -1 0 0 501 502 0.00000000000E+00 0.00000000000E+00 0.17700026409E+03 0.17700026409E+03 0.00000000000E+00 0. -1.
21 -1 0 0 502 503 0.00000000000E+00 0.00000000000E+00 -0.45779372796E+03 0.45779372796E+03 0.00000000000E+00 0. 1.
6 1 1 2 501 0 -0.13244216743E+03 -0.16326397666E+03 -0.47746002227E+02 0.27641406353E+03 0.17300000000E+03 0. -1.
-6 1 1 2 0 503 0.13244216743E+03 0.16326397666E+03 -0.23304746164E+03 0.35837992852E+03 0.17300000000E+03 0. 1.
这是我的程序,它简单地读取文本文件并将其放入一个数组(或更具体地说,一个向量的向量):
vector <float> vec; //define vector for final table for histogram.
string lines;
vector<vector<float> > data; //define data "array" (vector of vectors)
ifstream infile("final.txt"); //read in text file
while (getline(infile, lines))
{
data.push_back(vector<float>());
istringstream ss(lines);
int value;
while (ss >> value)
{
data.back().push_back(value); //enter data from text file into array
}
}
for (int y = 0; y < data.size(); y++)
{
for (int x = 0; x < data[y].size(); x++)
{
cout<<data[y][x]<< " ";
}
cout << endl;
}
// Outputs the array to make sure it works.
现在,此代码对于文本文件的前 6 列(这些列完全是整数)运行良好,但随后它会完全忽略第 6 列及更高列(这些列包含科学记数法)。
我已经尝试将向量重新定义为双精度和浮点类型,但它仍然做同样的事情。如何让 C++ 识别科学记数法?
提前致谢!
将 int value;
更改为 double value;
并将向量更改为 double 而不是 int。
更好的是,因为你有三个声明必须全部同步到正确的类型,所以为该类型创建一个别名,如下所示:using DATA_TYPE = double;
然后声明你的向量,如下所示:vector<vector<DATA_TYPE> > data;
, DATA_TYPE value;
, 等等。这样一来,无论出于何种原因更改数据类型,所有向量和变量声明都将自动更新,从而避免此类错误。