Программа пропускает методы считывания данных для второго объекта. 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 шт):
Судя по коду, Вы используете для всех кодов метод консольного ввода 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);
}
...