Чтение текстового файла проблема с C ++ ifstream - PullRequest
0 голосов
/ 24 мая 2018

Моя цель - прочитать текстовый файл с несколькими столбцами (здесь только два) и сохранить целые столбцы в векторах.Столбец 1 хранится в столбце 1, столбец 2 в столбце 2 и т. Д.

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


/* ======= global variables ======= */

double col1;
double col2;
std::vector<double> column1;
std::vector<double> column2;

Функция readFile сначала проверяет наличие проблем с открытым файлом.Далее он читает текстовый файл, пока файл не находится в конце.

Моя проблема в том, что только первая строка работает нормально.После возврата последней записи в столбце col3 она пропускает первую запись столбца 1, поэтому вся конструкция данных смещается.Данные, которые должны были храниться в столбце 2, хранятся в столбце 1 и т. Д.

double readingFile()
{
    std::ifstream infile("file.txt");                   
    if(!infile)
    {
    std::cerr << "* Can't open file! *" << std::endl;
    return 1;
    }
    else
    {
        // skipping first two lines.             
        infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');   

        while(infile >> col1 >> col2 >> col3)
        {
            column1.push_back(col1);
            column2.push_back(col2);
            column3.push_back(col3);
        }
    }
    infile.close();
    return 0;
}

Вот пример некоторых данных:

 //There is some text before the actual numbers, 
 //like the name of the creator of the file. Thats why i'm "ignoring" the first two line out.
 1.2 3.4 4.6
 0.9 0.4 7.1
 8.8 9.2 2.6

Первая строка работаетхорошо.col1 содержит 1.2, col2 - 3.4, а col3 - 4.6.Но затем 0,9 пропускается, а col1 - 0,4, col2 - 7,1 и т. Д.

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте использовать:

while (infile >> col1 >> col2)
{
    column1.push_back(col1);
    column2.push_back(col2);
}

Выше приведен предпочтительный способ чтения из файла.

...