C ++,从txt到矢量的读取翻倍,读取整个文件时出现问题

时间:2019-01-18 07:38:06

标签: c++ vector

所以我有一个文本文件,其中2栏双打之间有一个制表符,并尝试将它们读入2个向量。我的第一个问题专家认为,它不会遍历整个文件,而是从最后三分之一开始。我的第二个问题是,虽然它确实执行push_back,但它会将数字转换为其他数字。.我只是无法理解..如果我尝试将它们全部放入一个字符串向量中,则可以正常工作,但是我需要它们为double或int以进行进一步处理

ifstream myfile("TextFile",ios::in);

if (!myfile) 
{
    cout << "Can't oppen" << endl;
    system("pause");
    return -1;
}



vector<long double> Datenx;
vector<long double> Dateny;
vector<string>lel;

string line;

while (getline(myfile, line)) {

    //  lel.push_back(line);

    string numberx = line.substr(0, 12);
    int pos = line.find("   ");
    string numbery = line.substr(pos + 1, 12);
    stringstream iss(numberx);

    long double x = 0.0;

    iss>> setprecision(10)>>fixed >>showpoint >> x;
    //cout <<fixed<< numberx << endl;
    //cout<<setprecision(10)<<fixed<< x << endl;

    Datenx.push_back(x);
    stringstream is(numbery);
    long double y = 0.0;
    is >> y;
    Dateny.push_back(y);
}
for (int n = 0; n < 100; n++) {
    cout << Datenx[n] << ' ' << endl;
}
    //  cout << fixed << Datenx[2] << ' ' << endl;

    cin.get();
    return 0;

输入文件的一部分:

0.0000000000  0.0006536954

0.0000000100  0.0005515555

0.0000000200    0.0005004856

0.0000000300    0.0001327819

0.0000000400    0.0006945514

0.0000000500    0.0007864773

0.0000000600    0.0001327819

0.0000000700    0.0007354074

输出:Datenx向量:

0

1e-08

2e-08

3e-08

...

输出:Dateny向量:

0.000653695

0.000551555

0.000500486

0.000132782

所以Dateny是对的..它会切掉最后一位 而Datenx向量完全错误。.

1 个答案:

答案 0 :(得分:2)

首先尝试使其简单。如果可行,您可以添加功能。

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

int main()
{
  std::vector<double> v1, v2;
  std::string line;

  std::ifstream myFile("input.txt");
  while(getline(myFile, line))
  {
    std::istringstream lineStream(line);
    double first, second;
    lineStream >> first >> second;
    v1.push_back(first);
    v2.push_back(second);
  }
}

我尝试使用以下“ input.txt”

1.1    1.2
2.1    2.2
3.1    3.2
4.1    4.2
5.1    5.2