C ++不会读取.txt文件中的科学记数据数据

时间:2015-06-08 15:24:31

标签: c++ arrays notation

我正在编写一个程序,它从一个文本文件中读取数据,该文件既有正常的整数,也有多个科学记数法的数字,形式为:#。##### 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和更高的列(这些是包含科学记数字的列)。

我已经尝试重新定义向量作为double和float两种类型,但它仍然做同样的事情。如何让C ++识别科学记数法呢?

提前致谢!

1 个答案:

答案 0 :(得分:3)

int value;更改为double value;,并将您的矢量更改为double而不是int。

更好的是,由于你有三个必须全部同步到正确类型的声明,所以为这个类型创建一个别名:using DATA_TYPE = double;然后声明你的向量,如下所示:vector<vector<DATA_TYPE> > data;DATA_TYPE value;等等。如果你因为某种原因改变了数据的类型,你的所有向量和变量声明都会自动更新,从而避免这些类型的错误。