getLine () возвращает новую строку и никаких данных - PullRequest
0 голосов
/ 06 октября 2018

У меня есть следующий код:

    const char *fn = fileName.c_str();
    std::ifstream file (fn);
    std::vector<std::string> value(20000);
    int i = 0;
    while ( file.good() )
    {
        getline ( file, value[i] );
        i+=1;
        std::cout << value[i]<< std::endl;
        std::cout << i << std::endl;
    }

Программа читает весь файл, я знаю это, потому что напечатано правильное количество индексов.Однако данных нет, просто новая строка перед каждым выводом «i».Это файл, который я сохранил из Excel в Windows и читаю в Linux - это моя проблема?Что случилось с моими данными?

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Лучший способ чтения в файле:

std::string text_line;
std::vector<string> file_lines;
while (std::getline(file, text_line))
{
  file_lines.push_back(text_line);
}

Несмотря на то, что он не оптимален по скорости, он выполняет свою работу и не имеет верхнего предела (за исключением объема памяти вашей программы).разрешено).

0 голосов
/ 06 октября 2018

нет данных, просто новая строка перед каждой печатью "i".

Поскольку вы увеличиваете i перед доступом к value[i].

Увеличение i сразу после доступа к value[i] решает проблему пропущенных данных.

DEMO

0 голосов
/ 06 октября 2018

Редактировать:

Извините, я просто исправлял очевидную логическую ошибку.

Тем не менее, вот идеальный вариант чтения строк файла:

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

int main() {
    std::ifstream file {"test.txt"};
    std::vector<std::string> values;

    std::string temp;

    while (getline(file, temp)) {
        values.push_back(temp);
    }

    for (int i = 0; i < values.size(); ++i) {
        std::cout << values[i] << '\n' << i << '\n';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...