Цикл работает / не работает, не уверен, почему переполнение стека

У меня проблема с for цикл в конце этого кода.

Цикл предназначен для игры в палач, и, по сути, цикл проходит через char массив с секретным словом, и сравнивает предположение пользователя с каждым элементом в char массив. Если он найден, он обновляет вывод, чтобы показать букву, и сбрасывает счетчик на 0, или, если счетчик равен длине секретного слова, это означает, что цикл сделал не Найти char и он должен добавить один на дисплей (для виселицы виселицы) а также поместите неправильное предположение в неправильный массив предположений.

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

Это происходит на первый взгляд, и только когда я играю во вторую игру. Я думал, что это была проблема со счетчиком, но у меня сбрасывается на 0 как в начале while цикл и обнуление в for петля если правильный ответ найден.

Так что я не знаю, почему он прочитал бы правильный ответ как правильный и все же поместил бы его в wrongChoice массив, так как счетчик в этой точке должен не быть wordLength - 1, Вот код:

while(!winner)
{
count = 0;
for(int i = 0; i < secretWord.length(); i++)
cout << userPrompt[i] << " ";
cout << "\n" << endl;
cout << "Wrong Guess: ";
for(int i = 0; i < (secretWord.length() + 6); i++)
{
cout << userChoice[i] << " ";
}
cout << "\n" << endl;
displayGallows(display);

if(display == 6)
{
cout << "Sorry, you lost!" << endl;
break;
}

cout << "Enter a letter: ";
cin >> userGuess;
while(!cin)
{
cin.ignore();
cin.clear();
cin.sync();
cout << "Error reading input character! Try Again!" << endl;
cout << "Enter a letter: ";
cin >> userGuess;
}
guessCount++;
cin.ignore();
for(int i = 0; i < secretWord.length(); i++)
{
if(word[i] == tolower(userGuess))
{
userPrompt[i] = tolower(userGuess);
count = 0;
}
else if(count == (wordLength - 1))
{
display++;
userChoice[guessCount - 1] = toupper(userGuess);
}
count++;
}
winner = checkWin(word, userPrompt, display, secretWord);
}
again = playAgain();

-4

Решение

Угадай здесь, но разве это только / всегда первый персонаж, который создает тебе проблему?

Вы используете count в качестве детектора, если userGuess был где-то в слове [], но если он был в первом символе в слове [], то счетчик по-прежнему увеличивается так же, как если бы первый символ был неправильным. Так что в конце вашего цикла это также берет ветку неправильного выбора. На самом деле вы хотели проверить после окончания цикла … не каждую итерацию цикла!

попробуй это:

        bool found = false;
for(int i = 0; i < secretWord.length(); i++)
{
if(word[i] == tolower(userGuess))
{
userPrompt[i] = tolower(userGuess);
found = true;
}
}

if( !found )
{
display++;
userChoice[guessCount - 1] = toupper(userGuess);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]