2016-01-18 3 views
-5

Я создал функцию, которая получает ряд догадок (последовательность цветов) от пользователя и помещает их в вектор, и эта функция вызывается внутри цикла while в main().Вектор не очищается

Каждый раз, когда он вызывается циклом while, предположение должно быть очищено перед повторным наполнением входами. Однако во втором цикле ввод цвета, который я ввел во время первого цикла, активирует мое сообщение об ошибке («Недопустимая или повторяющаяся запись цвета ...»), предполагая, что вектор не был успешно очищен.

Я попытался очистить его пространством, различными строками и т. Д., Но ничто, кажется, не очистило его. Что мне не хватает?

Функция:

void getGuess(vector<string> &currentGuessPegs, vector<string> &colorChoices, int maxPegSlots) { 

string input; // stores input temporarily 

// ---clear previous guess--- 
for (int i = 0; i < maxPegSlots; i++) { 
    currentGuessPegs[i] == ""; 
} 

// ---prompt player for each peg guess and store in currentGuessPegs--- 
for (int i = 0; i < maxPegSlots; i++) { 
    cout << "Peg " << i+1 << ": "; 
    cin >> input; 

    while (find(currentGuessPegs.begin(), currentGuessPegs.end(), input) != currentGuessPegs.end() // Loops if color entry has already been used 
     || find(colorChoices.begin(), colorChoices.end(), input) == colorChoices.end()) {   // or is an invalid choice 

     cout << "Invalid or repeated color entry. See color choices and re-enter a color you have not used.\n"; 
     cout << "Peg " << i + 1 << ": "; 
     cin >> input; 
    } 

    currentGuessPegs[i] = input; 
} 
} 

А вот мой вызов функции из основной():

// ---get and check guesses until maximum # of guesses is exceeded or solution is guessed--- 
while (guessCount < maximumGuesses && solutionGuessed == false) { 
    getGuess(currentGuess, colorOptions, numberOfPegs); // get the guess 
    solutionGuessed = checkGuess(currentGuess, solution, numberOfPegs, red, white); // check the guess; returns true if solution was guessed 

    cout << "r: " << red << " w: " << white << endl << endl; 

    guessCount++; 
} 
+2

_ «Я попытался очистить его пространством, различными строками и т. Д., Но, похоже, ничего не очищает. Что мне не хватает?» _ CurrentGuess.clear() 'может быть? –

+0

Если я использую .clear(), он освобождает место, которое я выделил для своего вектора. – user1861051

+2

Используйте 'push_back()' вместо того, чтобы заранее прорисовывать свой вектор. –

ответ

4
currentGuessPegs[i] == ""; 
//     ^^ 

Упс.

+0

Ба, так просто. Спасибо за помощь! – user1861051

+3

Добро пожаловать. Отключение отладчика человека –

Смежные вопросы