Считать построчно числа из файла

Есть txt файл с числами вида:

10
11
15
12
16
13
и тд

Необходимо считать построчно каждую цифру и записывать в две переменные X,Y. То есть 10 пойдет в X, 11 в Y, и снова 15 в X и так далее.

Написал небольшой метод для этого, но он работает неправильно. Берет от 10 только 0 и какое то число из середины, и крутится так в бесконечном цикле

void WallsManager::Read() {
    int x, y;
    std::ifstream file("levels/WallsLevel.txt");
    if (file) {
        while (!file.eof()) {
            file >> x >> y;
            Wall wall{x, y};
            wallsList.push_back(wall);
        }
    }
}

Как его можно подправить чтобы он работал правильно?

исходный файл

введите сюда описание изображения

То что выводит, бесконечный цикл

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Arseni Mourzenko

С кодом, который вы привели здесь, всё нормально. Есть маленькая проблема с моментом, когда вы проверяете конец файла, но бесконечный цикл не от неё: единственное последствие, которую она влечет, это то, что последняя координата x, y будет отображаться дважды. Это известная проблема.

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

Вот более простой вариант вашего кода (с исправленной проблемой последней координаты):

example.cpp:

#include <iostream>
#include <fstream>

int main() {
    int x, y;
    std::ifstream file("levels.txt");
    if (file) {
        while (true) {
            file >> x >> y;
            if (file.eof()) {
                break;
            }

            std::cout << x << ", " << y << std::endl;
        }
    }

    return 0;
}

Он работает:

$ cat levels.txt 
10
15
10
15
10
16
10
17
10
18
10
20
$ g++ example.cpp
$ ./example.out
10, 15
10, 15
10, 16
10, 17
10, 18
10, 20
→ Ссылка