Программа пропускает методы считывания данных для второго объекта. C++

Когда ввожу данные для первого, то всё стандартно, но когда перехожу к методам для второго объекта(start2), то компилятор тупо скипает считывание.

class Name_Pairs {
public:
    vector<string> name;
    vector<double> age;
    void read_names();
    void read_ages();
    void sort_name();
};
void Name_Pairs::read_names() {
    string h;
    for (int i = 0; cin >> h;) {
        if (h == "stop") { break; }
        name.push_back(h);
    }
}
void Name_Pairs::read_ages() {
    int h;
    for (int i = 0; cin >> h;) {
        age.push_back(h);
    }
}
int main()
{
    Name_Pairs start;
    Name_Pairs start2;
    start.read_names();
    start.read_ages();
   

     start2.read_names();
     start2.read_ages();

}

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

Автор решения: 4500zenja

Судя по коду, Вы используете для всех кодов метод консольного ввода cin, но при этом Вы не ставите условия, при котором функция read_ages() завершится. Программа считает, что, после ввода всех строк и stop в read_names(), пользователь начнёт вводить числа, однако она не поймёт, когда именно нужно это заканчивать.

Так, если мы будем вводить числа, программа будет требовать ещё: цикл for (int i = 0; cin >> h;) { продолжает работать, пока работает cin >> h, а поскольку после ввода в консоль последняя продолжает ожидать новых значений, цикл становится вечным по крайней мере до ввода не-числа — тогда программа глохнет в лучшем случае или выбрасывает исключение в худшем.

Я советую каким-либо образом поставить условие в этот цикл по аналогии с read_ages(), чтобы можно было завершить цикл и перейти к следующему объекту, например, так:

...
int h;
for (int i = 0; cin >> h;) {
    if (h < 0) break; // отрицательный возраст?
    age.push_back(h);
}
...
→ Ссылка