Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取字符输入和使用循环计数器时出现问题_C++_Char_Project_User Input_Loop Counter - Fatal编程技术网

C++ 读取字符输入和使用循环计数器时出现问题

C++ 读取字符输入和使用循环计数器时出现问题,c++,char,project,user-input,loop-counter,C++,Char,Project,User Input,Loop Counter,好吧,我这里有一个大问题,在花了两天时间讨论这个问题之后,我不知道为什么它不能像我认为的那样工作 第一个问题:我有一个函数,通过输入y或n来查看玩家是否希望再次玩。如果他们按n键,它会终止,但如果他们按Y键或Y键,它只会再次询问他们是否想再次播放,直到按下除Y之外的任何其他字符为止 我的第二个问题,也是最烦人的,是循环计数器,我用它来确定他们作为猜测输入的字符是否在单词(刽子手游戏)中使用。在我做了一些小的修改之后,它以前工作过,现在不再像预期的那样工作了,问题是我根本没有弄乱代码,它在别处。本

好吧,我这里有一个大问题,在花了两天时间讨论这个问题之后,我不知道为什么它不能像我认为的那样工作

第一个问题:我有一个函数,通过输入y或n来查看玩家是否希望再次玩。如果他们按n键,它会终止,但如果他们按Y键或Y键,它只会再次询问他们是否想再次播放,直到按下除Y之外的任何其他字符为止

我的第二个问题,也是最烦人的,是循环计数器,我用它来确定他们作为猜测输入的字符是否在单词(刽子手游戏)中使用。在我做了一些小的修改之后,它以前工作过,现在不再像预期的那样工作了,问题是我根本没有弄乱代码,它在别处。本质上,每次循环遇到单词中的用户猜测时,循环计数器都会重置为0,但如果计数器等于单词的长度,则表示未找到用户猜测,并且应将显示值设置为加1。但是,它现在所做的一切就是始终保持在零,即使用户输入了错误的猜测(这将使显示值增加1),它仍然保持在零。我花了两天的时间试图让这部分正常工作,它昨天正常工作,但今天不行,我可以用另一双眼睛来观察它,看我是否忽略了什么

void playHangman(string wordArray[], bool usedWords[])
{
    string secretWord;
    unsigned seed = time(0);
    srand(seed);
    int wordChoice = (rand()%20);
    int counter = 0;
    int display = 0;
    bool winner = false;
    int wordLength = secretWord.length();
    int count;
    char again;

    do
    {
        while(usedWords[wordChoice])
        {
            if(wordChoice == 19)
                wordChoice = 0;
            else if(counter == 20)
            {
                for(int i = 0; i < SIZE; i++)
                    usedWords[i] = false;
                wordChoice = (rand()%20);
                counter = 0;
            }
            wordChoice++;
            counter++;
        }
        secretWord = wordArray[wordChoice];
        const char *word = new char [secretWord.length()];
        word = secretWord.c_str();
        char *userPrompt = new char [secretWord.length()];
        for(int i = 0; i < secretWord.length(); i++)
            userPrompt[i] = '_';
        userPrompt[secretWord.length()] = '\0';
        char userGuess = '\n';

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

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

            cout << "Enter a letter: ";
            cin >> userGuess;
            cin.ignore();
            for(int i = 0; i < secretWord.length(); i++)
            {
                if(word[i] == userGuess)
                {
                    userPrompt[i] = userGuess;
                    count = 0;
                }
                else if(count == (wordLength - 1))
                    display++;
                count++;
            }
            winner = checkWin(word, userPrompt, display, secretWord);       
        }
        again = playAgain();
    }while(again == 'Y' || again =='y');
}

char playAgain()
{
    char playAgain;
    cout << "Would you like to play again? Enter y or n: ";
    cin >> playAgain;
    return playAgain;

}
void playHangman(字符串单词数组[],布尔使用的单词[])
{
字符串密文;
无符号种子=时间(0);
srand(种子);
int wordChoice=(rand()%20);
int计数器=0;
int显示=0;
bool-winner=false;
int-wordLength=secretWord.length();
整数计数;
再次烧焦;
做
{
while(使用单词[wordChoice])
{
if(wordChoice==19)
wordChoice=0;
否则如果(计数器==20)
{
对于(int i=0;icout请求再次播放可能是因为没有重置变量“winner”。按以下操作可能会更正它

do
{
    winner = false; //set to false at each iteration
    while(usedWords[wordChoice])
    {
        if(wordChoice == 19)
            wordChoice = 0;
        else if(counter == 20)

要求再次播放可能是因为没有重置变量“winner”。执行以下操作可能会更正它

do
{
    winner = false; //set to false at each iteration
    while(usedWords[wordChoice])
    {
        if(wordChoice == 19)
            wordChoice = 0;
        else if(counter == 20)

要求再次播放可能是因为没有重置变量“winner”。执行以下操作可能会更正它

do
{
    winner = false; //set to false at each iteration
    while(usedWords[wordChoice])
    {
        if(wordChoice == 19)
            wordChoice = 0;
        else if(counter == 20)

要求再次播放可能是因为没有重置变量“winner”。执行以下操作可能会更正它

do
{
    winner = false; //set to false at each iteration
    while(usedWords[wordChoice])
    {
        if(wordChoice == 19)
            wordChoice = 0;
        else if(counter == 20)

实际上有两个问题:

  • 为什么不重新启动游戏?回答:因为程序认为游戏已经成功玩了。你在循环前面设置变量,而不是重置它们来玩另一个游戏。建议:创建一个实际玩游戏的函数,然后从外循环调用它。在该函数中玩游戏
  • 为什么它不增加计数呢?不知道。为什么你认为计数总是保持在0?然而,似乎条件是计数=(字长-1)
  • 不太可能成为
    真值
    ,因为
    字长
    设置为
    secretWord
    的大小,而
    secretWord
    恰好为空(即
    字长
    设置为
    0
    ),并且此后从未更改
    实际上有两个问题:

  • 为什么不重新启动游戏?回答:因为程序认为游戏已经成功玩了。你在循环前面设置变量,而不是重置它们来玩另一个游戏。建议:创建一个实际玩游戏的函数,然后从外循环调用它。在该函数中玩游戏
  • 为什么它不增加计数呢?不知道。为什么你认为计数总是保持在0?然而,似乎条件是计数=(字长-1)不太可能成为
    真值
    ,因为
    字长
    设置为
    secretWord
    的大小,而
    secretWord
    恰好为空(即
    字长
    设置为
    0
    ),并且此后从未更改

  • 实际上有两个问题:

  • 为什么不重新启动游戏?回答:因为程序认为游戏已经成功玩了。你在循环前面设置变量,而不是重置它们来玩另一个游戏。建议:创建一个实际玩游戏的函数,然后从外循环调用它。在该函数中玩游戏
  • 为什么它不增加计数呢?不知道。为什么你认为计数总是保持在0?然而,似乎条件是计数=(字长-1)不太可能成为
    真值
    ,因为
    字长
    设置为
    secretWord
    的大小,而
    secretWord
    恰好为空(即
    字长
    设置为
    0
    ),并且此后从未更改

  • 实际上有两个问题:

  • 为什么不重新启动游戏?回答:因为程序认为游戏已经成功玩了。你在循环前面设置变量,而不是重置它们来玩另一个游戏。建议:创建一个实际玩游戏的函数,然后从外循环调用它。在该函数中玩游戏
  • 为什么它不增加计数