为什么我的小型C游戏会忽略玩家的首次尝试?

时间:2018-07-12 18:12:10

标签: c memory stdout stdin getchar

因此,作为C和程序设计的初学者,我尝试编写一个小“ hangman”游戏。在main()之外,有两个函数,一个用于获取用户的尝试,另一个实际检查字符是否在单词中,然后循环直到用户找到单词。在这里:

main.c:

/*GAME OF HANGMAN*/
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"

int main(void)
{
        /*Menu*/
        int menuChoice = 0;

        printf("***********\n");
        printf("* HANGMAN *\n");
        printf("***********\n\n");
        printf("1.Play\n");
        printf("2.Quit\n");
        scanf("%d", &menuChoice);

        switch (menuChoice)
        {
        case 1:
          fflush(stdin);
          printf("Let's Play!\n");
          game();
         break;
        case 2:
          printf("Bye!\n");
          exit(0);
          break;
        default:
          printf("Error.\n");
          break;
        }

        return 0;
}



#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

functions.c:

//Get User Attempts
char userinput(void)
{
        char input = 0;

        input = getchar();//get user attempt
        input = toupper(input);//make 'input' uppercase if it's not

        while(getchar() != '\n');//read the \n to flush it from memory

        return input;//return user attempt
}

//Actuall game
void game(void)
{
        char secret[] = "HELLO";//To find
        char hiden[] = "*****";//Hidden word
        int wsize = 5;//It's size.
        do
        {
                printf("%s\n", hiden);
                printf(">");
                char try = userinput();
                int i = 0;
                for(i = 0; i < wsize; i++)
                {
                        //replace stars by found letters.
                        if(try == secret[i])
                        {
                                hiden[i] = secret[i];
                        }
                }
        }while(strcmp(hiden, secret) != 0); //Loop until found the word      

        printf("Congrats, the word was %s!\n", secret);

} `

(我不显示“主要”文件/功能,因为它仅用作重定向到游戏(无效)的菜单。)

要查找的单词是“硬编码的”,我将使其从文件中随机选择。

每当我运行它时,第一个用户的输入是对还是错,都将被完全忽略,而从第二次尝试开始,它就可以正常工作。

我尝试删除     while(getchar()!='\ n') 然后它将停止忽略第一次尝试,而是显示“> *****”而不是“>”。

我真的不明白发生了什么,任何帮助将不胜感激!

对不起,我的英语不好,谢谢。

0 个答案:

没有答案