因此,作为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') 然后它将停止忽略第一次尝试,而是显示“> *****”而不是“>”。
我真的不明白发生了什么,任何帮助将不胜感激!
对不起,我的英语不好,谢谢。