#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int compare(char word[], char mystery[])
{
int i=0;int bool=1;
while((i<=20)&&(bool==1))
{
if (word[i]==mystery[i])
i++;
else
bool=0;
}
return bool;
}
char readCharacter()
{
char character = 0;
character = getchar();
character = toupper(character);
while (getchar() != '\n') ;
return character;
}
void readString(char *word,char *mystery)
{
int i=0;
printf("Enter the word to guess : ");
scanf("%s",word);
while(*((word)+(i)) != '\0')
{
*((word)+(i))= toupper(*(word+i));
*((mystery)+(i))='*';
i++;
}
*(mystery+i)='\0';
}
void process(char *word,char *mystery,char letter,int *change)
{
int i=0;
while (*((word)+(i))!= '\0')
{
if (*((word)+(i))==letter)
{
*((mystery)+(i))=letter;
*change=1;
}
i++;
}
}
void test(char *word,char *mystery, int triesleft)
{
if (*mystery!=*word)
{
printf("The mystery word is : %s",*mystery);
printf("\n You have %d tries left.", triesleft);
}
else
{
printf("You won !");
}
}
int main()
{
int triesleft = 10; int change=0;
char word[20]; char mystery[20];char letter;
readString(&word,&mystery);
while((compare(word,mystery)==0) && (triesleft>0))
{
change=0;
printf("Enter the letter :");
letter=readCharacter();
process(&word,&mystery,letter,&change);
if ((change)==1)
triesleft--;
test(&word,&mystery,triesleft);
}
if (triesleft>0)
return 0;
printf("You lost.");
return 1;
}
我是C的初学者,我想在C中编写一个简单的Hangman游戏并且编译得很好但是在输入第一个字母后似乎崩溃了,我找不到解决方案! 我不知道可能是什么原因,但我在C中使用字符串时遇到了很多麻烦,因为它们不存在可能是我不知道的一个不好的操作:/
答案 0 :(得分:1)
您第一次致电readString
就足以让该程序崩溃。
word
和mystery
是数组,因此&word
是char **
而不是char *
。你应该使用
readString(word, mystery);
但编译器应该发出警告。警告不是为了分散初学者的注意力,以表示可能的(如果你不理解警告可能)错误。
以后可能还有其他问题......
答案 1 :(得分:0)
在 readString()函数中,您应该使用&#39; \ 0&#39; 而不是 NULL 作为C字符串以这个角色结束。
答案 2 :(得分:0)
您不能声明名为bool的变量,因为它是一种类型。在C中,实际上没有为所有编译器定义,因为bool不是标准的一部分,但是一些编译器和某个平台无论如何都会定义它