Как с помощью for или while переделать часть кода чтобы вводилось определенное количество чисел
Нужно, чтобы конец ввода был выполнен не девятками, а с помощью цикла, через шесть раз. Через сумму и счётчик не получилось.
// Функция создает двусвязный список с двумя сторожами и заполняет
// его значениями с клавиатуры
void CreateList(list<list<int>>& listMatch)
{
int team1;
int team2;
int s1; // счёт первой команды
int s2; // счёт второй команды
cout << "Вводите номер команды и счёт до четырех 9(конец ввода)" << endl;
cin >> team1 >> s1 >> team2 >> s2;
while (team1 != 9 && s1 != 9 && s2 != 9 && team2 != 9)
{
list<int> match = { team1, s1, team2, s2 };
listMatch.push_back(match);
cin >> team1 >> s1 >> team2 >> s2;
}
}
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
cout << "Вводите номер команды и счёт шесть раз" << endl;
for (i = 0; i < 6; i++)
{
cin >> team1 >> s1 >> team2 >> s2;
list<int> match = { team1, s1, team2, s2 };
listMatch.push_back(match);
}
Автор решения: Ellenord
→ Ссылка
Вот это будет работать:
void CreateList(int matchCount /* количество матчей */, list<tuple<int, int, int, int>>& listMatch)
{
// clear result list
listMatch.clear();
cout << "Введите результаты матчей:" << endl;
for (int i = 0; i < matchCount; ++i)
{
cout << "Введите результат " << i + 1 << " матча:" << endl;
int team[2]; // team numbers
int score[2]; // team scores
cout << "Введите номер и счёт первой команды:" << endl;
cin >> team[0] >> score[0];
cout << "Введите номер и счёт второй команды:" << endl;
cin >> team[1] >> score[1];
listMatch.emplace_back(team[0], score[0], team[1], score[1]);
}
}
В данном примере кода я заменил list<int> на tuple<int, int, int, int>, поскольку для хранения небольших наборов элементов фиксированного размера лучше использовать кортежи.