Считать построчно числа из файла
Есть 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 шт):
С кодом, который вы привели здесь, всё нормально. Есть маленькая проблема с моментом, когда вы проверяете конец файла, но бесконечный цикл не от неё: единственное последствие, которую она влечет, это то, что последняя координата 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

