//Get Number to Guess
if (numlen == 0) {
...
}
else {
//Fill vector to pick from
...
}
Внутри блока if else у вас есть две следующие строки:
vector<int> numvct(numlen, 0);
и
vector<int> numvct(numlen);
Эти строки объявляют и инициализируют векторы, которые выходят из области видимости, когда программа покидает их соответствующие блоки if / else. Впоследствии вы снова используете этот вектор numvct, поэтому я предполагаю, что вы также объявили и инициализировали его перед любым из показанного кода, и он, вероятно, начинается с пустого. Поскольку эти два вектора numvct в блоке if / else выходят из области видимости, вся работа, которую вы с ними делаете, также уходит. Это означает, что когда вы попытаетесь использовать numvct позже, вы работаете с (предположительно) пустым, который вы объявили в самом начале программы.
Вместо переопределения numvct, попробуйте просто изменить его размер:
//vector<int> numvct(numlen);
numvct.resize(numlen);
и
//vector<int> numvct(numlen, 0);
numvct.resize(numlen, 0);
Также вы можете попытаться сократить количество переменных, которые вы здесь используете, и попытаться объявить их только в тех блоках кода, где они действительно необходимы. Это облегчит отслеживание происходящего.
Редактировать: Я просто хочу добавить, что я предлагаю изменить размеры векторов, в отличие от любой другой операции, которую вы могли бы выполнить над вектором, потому что я действительно не знаю, для чего конкретно вы их использовали. Я запустил ваш код с этими изменениями, а также с добавлением ~ 25 других объявлений переменных, которые вы не включили в свой пост, и он делал вещи, которые казались разумными, то есть позволял мне выбирать число, угадывать его цифры, печатать номер коров и быков и т. д.