Как прочитать файл построчно в вектор, а затем распечатать вектор - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь прочитать файл, добавить каждую строку в вектор, а затем распечатать вектор. Но сейчас он напечатает только первую строку. Поэтому я предполагаю, что первая строка - это единственная строка, добавляемая к вектору, но я не могу понять, почему.

Вот мой код:

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

using namespace std;

int main()
{
    std::vector<std::string> vecOfStrs;

    std::ifstream fileIn("example.txt");
    std::string str;
    std::string newLine;
    newLine = str + "\n";

    while (std::getline(fileIn, str)) {
        std::string newLine;
        newLine = str + "\n";
        if (newLine.size() > 0) {
            vecOfStrs.push_back(newLine);
        }
        fileIn.close();
        for (int i = 0; i < vecOfStrs.size(); i++) {
            std::cout << vecOfStrs.at(i) << ' ';
        }
    }
}

Вот текстовый файл, и сейчас он должен распечатываться точно так, как здесь:

Barry Sanders
1516 1319 1108 1875 -999
Emmitt Smith
1892 1333 1739 1922 1913 1733 -999
Walter Payton
1999 1827 1725 1677 -999

1 Ответ

0 голосов
/ 11 ноября 2019

Есть логика внутри вашего цикла чтения, которая действительно принадлежит после цикл завершился вместо этого:

  • Вы close()После того, как вы прочитали поток файла после 1-й строки, разрывается цикл после 1-й итерации.

  • Вы печатаете весь vector после добавления каждой строки в него.

Кроме того, вам вообще не нужны переменные newLine.

Попробуйте вместо этого:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main() {
    std::vector<std::string> vecOfStrs;
    std::ifstream fileIn("example.txt");
    std::string str;

    while (std::getline(fileIn, str)) {
        if (str.size() > 0) {
            vecOfStrs.push_back(str);
        }
    }

    fileIn.close();

    for (size_t i = 0; i < vecOfStrs.size(); i++) {
        std::cout << vecOfStrs[i] << ' ';
    }

    return 0;
}
...