Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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 - Fatal编程技术网

C (希望)我的刽子手游戏的最后一圈,

C (希望)我的刽子手游戏的最后一圈,,c,C,我很抱歉用我经常遇到的刽子手问题来干扰这个论坛。我希望很快就完成这件事。我一直在努力工作。以下是我目前的代码: #include <stdio.h> #include <time.h> #include <string.h> #define MAX_WORD_LEN 20 #define MAX_TRIES 6 char* GetWordFromFile(); int HideWord(char* randomWordfromFile); void PlayA

我很抱歉用我经常遇到的刽子手问题来干扰这个论坛。我希望很快就完成这件事。我一直在努力工作。以下是我目前的代码:

#include <stdio.h>
#include <time.h>
#include <string.h>
#define MAX_WORD_LEN 20
#define MAX_TRIES 6
char* GetWordFromFile();
int HideWord(char* randomWordfromFile);
void PlayAgain();
void GameLogic(char *randomWordfromFile);
void clear_stdin();
void PlayGame();

int main()
{
printf("Welcome to Hangman. Would you like play? Please answer Y/N. \n");
int PlayorNot = getchar();
if (PlayorNot == 'Y' || PlayorNot == 'y')
    PlayGame();
else
    system("cls");
    printf("Goodbye");

return 0;
   }

void PlayGame()
 {
     char* word = GetWordFromFile();
     GameLogic(word);
     PlayAgain();
     }





char* GetWordFromFile()
{
FILE* pointertoFile = NULL;
char randomWordfromFile[MAX_WORD_LEN];
int i = 0 , ran = 0;
srand(time(NULL));
pointertoFile = fopen("C:\\Users\\Aditya\\Dropbox\\Hangman\\hangman.txt" , "r+");
for(; fgets(randomWordfromFile , MAX_WORD_LEN, pointertoFile) ; i++)
          ;
ran = rand() % i;
rewind(pointertoFile);
for(i = 0 ; i < ran ; i++)
    fgets(randomWordfromFile , MAX_WORD_LEN , pointertoFile);
return randomWordfromFile;
}



void GameLogic(char *randomWordfromFile)
{
    int UserGuess;
    int i, x;
    int WrongGuesses;
    size_t j;
    size_t len = strlen(word);
    char HiddenWord[len];
    for (j = 0; j < len; ++j)
    {
        HiddenWord[i] = "_ ";
    }
    printf("%s", HiddenWord);


    for(i = 0; i < MAX_TRIES; i++ )
    {
       printf("Go ahead and guess a letter\n");
       clear_stdin();
        scanf("%d", &UserGuess);


        for (x = 0; x < len; x++)
        {
            if (randomWordfromFile[x] == UserGuess)
                UserGuess = HiddenWord[x];
            else
                break;
        }
}
    printf("%s", randomWordfromFile);

}




void PlayAgain()
{
   printf("Do you want to play again? Please answer with Yes/No?");
    char PlayAgainAnswer = getchar();
    if (PlayAgainAnswer == 'Y' || PlayAgainAnswer == 'y')
        PlayGame();
    else if (PlayAgainAnswer == 'N"' || PlayAgainAnswer == 'n')
        printf("Thanks for playing");
    else
        printf("Thanks for playing");
}


void clear_stdin()
{
  while( getchar() != '\n' ){;}
}
经过一天又一天的工作和调试,它终于可以编译了。由于某种原因,当我打印出字母时,它不应该是。我相信它会进入第一个循环,询问用户是否想玩。回答“是”后,它会让你猜一封信。但在要求它根据单词中字母的数量显示u

我猜问题在以下循环中:

for (j = 0; j < len; ++j)
{
    HiddenWord[i] = "_ ";
}
printf("%s", HiddenWord);

然而,我似乎在这个循环中找不到问题,因为它是一个非常简单的循环。

您在循环中使用j和I作为索引,您希望它们是相同的

char HiddenWord[len];

由于您希望数组具有动态大小,因此需要在运行时分配内存。 您还应该检查内存分配是否成功。看看 别忘了在处理完之后释放内存

正如asbumste所指出的i vs j HiddenWord[j]='";因为您正在分配一个字符 HiddenWord[len]='\0' 当然,数组应该长1个字符 希望能有帮助

另外,您可能需要类似以下内容:

HiddenWord[2*j] = '_';
HiddenWord[2*j+1] = ' ';

但你明白我的意思了:

哦,哎呀。这是错误的,但仍然无法解决问题:/This line size\u t len=strlenword;。其中是word的定义?char*word=GetWordFromFile;我想你想写randomWordfromFile而不是word,因为word不是函数参数的名称。我更改了它,但它仍然不起作用。例如,现在它的打印(您的代码非常混乱,因此很难找到所有可能的问题/错误)。然而,你甚至没有检查fopen是否正常工作。我不太确定如何释放内存以及动态mememory如何工作,但我把它添加到了我的代码中。然而,这个错误仍然不起作用。有什么想法吗?在函数末尾添加freeHiddenWord,仅此而已。很高兴你的问题解决了。谢谢!这真是奇迹。似乎事实不是“毁了我的代码”。吸取的教训是要格外小心!
HiddenWord[2*j] = '_';
HiddenWord[2*j+1] = ' ';