2015-06-08 4 views
1

Я пишу программу, которая читает в массиве из текстового файла, который имеет как нормальные целые числа, так и несколько чисел, которые находятся в научной нотации, для меня##. Вот несколько образцов строки входного файла .txt:C++ не читается в научных данных нотации из .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++ для распознавания научной нотации?

Заранее благодарен!

+0

Можете ли вы показать первые несколько строк файла, который вы пытаетесь прочитать? – CoryKramer

+0

Примеры входов, выборочные выходы. Предпочтительно в _testcase_. Не поймите, почему так сложно. –

+2

Вы пытаетесь прочитать число с плавающей запятой в int и это не работает. – NathanOliver

ответ

2

Изменить int value; на double value;, а также сменить ваш вектор на double вместо int.

еще лучше, так как у вас есть три заявления, которые все должны быть синхронизированы с правильным типом, создайте псевдоним для этого типа, как это: using DATA_TYPE = double; затем объявить свои векторы и такие, как это: vector<vector<DATA_TYPE> > data;, DATA_TYPE value; и т.д. Таким образом, если вы изменяете тип данных по какой-либо причине, все объявления вашего вектора и переменной автоматически обновляются, что позволяет избежать таких ошибок.

+0

Это сработало отлично! Я попытался изменить векторы на тип double, но даже не думал о том, чтобы изменить значение, чтобы удвоить. такая простая ошибка! Спасибо огромное! – khfrekek

 Смежные вопросы

  • Нет связанных вопросов^_^