Как с помощью for или while переделать часть кода чтобы вводилось определенное количество чисел

Рейтинг: 0Ответов: 2Опубликовано: 02.05.2023

Нужно, чтобы конец ввода был выполнен не девятками, а с помощью цикла, через шесть раз. Через сумму и счётчик не получилось.

// Функция создает двусвязный список с двумя сторожами и заполняет
// его значениями с клавиатуры
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;
    }

}

Ответы

▲ 0Принят
cout << "Вводите номер команды и счёт шесть раз" << endl;

for (i = 0; i < 6; i++) 
{
    cin >> team1 >> s1 >> team2 >> s2;
    list<int> match = { team1, s1, team2, s2 };
    listMatch.push_back(match);
}
▲ 0

Вот это будет работать:

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>, поскольку для хранения небольших наборов элементов фиксированного размера лучше использовать кортежи.