Вместо того, чтобы отвечать на вопрос, который вы задали, я собираюсь ответить на вопрос, который вы не задавали, а именно:
В: Как я могу прочитать все строки файла, еслиЯ не знаю, сколько там строк?
A: Используйте std::vector<>
.
Если вы хотите прочитать все числа независимо от их спаривания:
// all code fragments untested. typos are possible
int i;
std::vector<int> all_of_the_values;
while(filein >> i)
all_of_the_values.push_back(i);
Если вы хотите прочитать все числа, поместите чередующиеся числа в разные структуры данных:
int i, j;
std::vector<int> first_values;
std::vector<int> second_values;
while(filein >> i >> j) {
first_values.push_back(i);
second_values.push_back(j);
Если вы хотите прочитать все числа, сохраните их вкакая-то структура данных:
int i, j;
struct S {int i; int j;};
std::vector<S> values;
while(filein >> i >> j) {
S s = {i, j};
values.push_back(s);
}
Наконец, если вы хотите читать файл по очереди, сохраняя первые два числа из каждой строки, отбрасывая оставшуюся часть каждой строки и сохраняя ихопределяемая пользователем структура данных:
std::vector<MyClass> v;
std::string sline;
while(std::getline(filein, sline)) {
std::istringstream isline(sline);
int i, j;
if(isline >> i >> j) {
values.push_back(MyClass(i, j));
}
}
В сторону : никогда не используйте eof()
или good()
в условном цикле.Это почти всегда приводит к ошибочному коду, как в вашем случае.Вместо этого предпочитайте вызывать функцию ввода в условии, как я это делал выше.