Как повторно инициализировать вектор в цикле while? - PullRequest
0 голосов
/ 01 июня 2019

Я делаю некоторые упражнения в .Я пытаюсь сделать простую игру, которая требует непрерывного ввода вектора от пользователя.

Я попытался повторно инициализировать вектор.Я использовал в цикле while(1) и пытался clear() это тоже.

vector<int> user;                 // initialize vector
while (1)
{                                 
    for (int guess; cin >> guess;)// looping
    {                             // user input
        user.push_back(guess);
    }
    if (user.size() != 4)         // check if user put exactly 4 numbers
    {         
        cerr << "Invalid input";
        return 1;
    }
    //...                        // doing some stuff with "int bulls"
    if (bulls == 4)
    {
        break;
    }
}    // now need to go back with emty vector, so that the user can input guesses again 

В моем терминале он зацикливается навсегда или останавливается в состоянии, которое я поставил для неверного ввода.

1 Ответ

2 голосов
/ 01 июня 2019

У вас есть бесконечный цикл из-за

for(int guess; cin >> guess;)

, где вы push_back до пользователь вектор до тех пор, пока не произойдет сбой std::cin.

Вы, вероятно, хотите иметь 4 пользовательский ввод.Если это так, попробуйте следующее, с помощью которого вам не нужно очищать вектор, поскольку в каждом цикле while вы создаете новый.

while (true)
{   
    std::vector<int> user;
    user.reserve(4); // reserve memory which helps not to have unwanted reallocations
    int guess;
    while(cin >> guess &&  user.size() != 4)
        user.emplace_back(guess);

    // doing some stuff with "int bulls"
    if (bulls == 4) {
        break;
    }
}
...