Задание из 10 главы "Принципы и практика использования C++". Почему векторы не заполняются?
Делал вроде по образцу, на основе полученных знаний о главе. Но программа после получения 7 пар координат пишет "Проверим оба вектора на равенство" и всё. Больше ничего. Векторы не заполняются, файл "mydata.txt" тоже. Векторы coordinates и points должны были хранить по 7 пар координат, который ввёл пользователь. Подскажите пожалуйста, в чём проблема?
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using std::cout;
using std::cin;
using std::ifstream;
using std::ofstream;
using std::string;
using std::vector;
using std::runtime_error;
void keep_window_open() {char ch; cin >> ch;}
void error(string s);
void skip_to_int();
void error(string s)
{
throw runtime_error(s);
}
struct Point
{
double x;
double y;
};
int main()
{
double x, y;
vector<Point> coordinates {};
cout << "Введите 7 пар координат x и y для записи в файл:\n";
for (int i; i < 7; ++ i) {
cin >> x >> y;
if (!cin)
{
skip_to_int();
}
coordinates.push_back(Point{x, y});
}
ofstream oft;
oft.open("mydata.txt");
if (!oft) error("Файл не открывается");
for (int i; i < coordinates.size(); ++ i)
{
oft << "(" << coordinates[i].x << ";" << coordinates[i].y << ")\n";
}
oft.close();
vector<Point> points {};
ifstream ist;
ist.open("mydata.txt");
if (!ist) error("Файл не открывается");
x = 0; y = 0;
while (ist >> x >> y) {
if (!ist)
{
skip_to_int();
}
points.push_back(Point{x, y});
}
ist.close();
cout << "\nПроверим оба вектора на равенство...\n";
for (int i; i < coordinates.size(); ++ i)
{
cout << "(" << coordinates[i].x << ";" << coordinates[i].y << ")\n";
}
for (int i; i < points.size(); ++ i)
{
cout << "(" << points[i].x << ";" << points[i].y << ")\n";
}
keep_window_open();
return 0;
}
void skip_to_int()
{
if (cin.fail())
{
cin.clear(); // возвращаем поток в good()
for (char ch; cin >> ch;)
{
if (isdigit(ch) || ch == '-' || ch == '.')
{
cin.unget();
return;
}
}
}
error("Ввода нет");
}