Прочитайте файл .dat и создайте массив C ++ - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь прочитать файл .dat со списком координат X и Y. Мой код работает для подсчета строк в файле, но он не работает для правильного чтения координат.В выводе просто покажи мне количество строк в файле .dat, но он не покажет мне координаты.Файл .dat имеет 2 столбца и более 5 строк (у меня много файлов с разным количеством координат).Любая помощь очень приветствуется, я очень новый в C ++.

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

using namespace std;

int main() {

    std::vector<int> numbers;

    ifstream fileB;
    const int SIZE=10;
    char filas_dat [SIZE];

    fileB.open("Verticesfixed_cell1slc44.dat");

    std::string line;
    int counter=0;
    while (getline(fileB, line)) //contador de filas
    {
        ++counter;
    }

    if(!fileB.good())
    {
        int current_number = 0;
        while (fileB >> current_number){
            numbers.push_back(current_number);}

        fileB.close();
        cout << "The numbers are: ";
        for (int count = 0; count < numbers.size(); count++){
            cout << numbers[count] << " ";}

        cout << endl;
    }
    else 
    {
       cout << "Error!";
    }
return 0
}

1 Ответ

0 голосов
/ 21 февраля 2019

Проблема в том, что после того, как вы посчитали количество строк в конце файла, вам больше нечего читать.Файл не перемещается обратно в начало автоматически.Вы должны указать файлу вернуться к началу.

Вторая похожая проблема заключается в том, что при достижении конца файла происходит сбой функции getline (потому что больше нечего читать).Это переводит ваш файл в состояние ошибки , когда ничего не будет работать, пока вы не очистите состояние ошибки.

Наконец, вызов !fileB.good() не требуется.Файл никогда не будет хорошим на этом этапе, опять же, это потому, что getline не удалось.

Попробуйте этот код

while (getline(fileB, line)) //contador de filas
{
    ++counter;
}
fileB.clear(); // clear the error state
fileB.seekg(0); // go back to the beginning of the file

int current_number = 0;
while (fileB >> current_number)
{
    numbers.push_back(current_number);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...