-4

我在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

1 回答 1

0

这里有一个猜测,但它是否只有/总是第一个字符给你带来问题?

如果 userGuess 在 word[] 某处,则使用 count 作为检测器,但如果它在 word[] 的第一个字符处,则 count 仍会以与第一个字符错误的方式相同的方式递增。所以在你的循环结束时,它也会选择错误选择的分支。你真正想要的是在循环结束后检查......不是循环的每次迭代!

尝试这个:

        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);
        }
于 2013-12-17T09:52:19.763 回答