有人知道这段代码有什么问题。它会带来上面的错误。我正在尝试创建一个生成“随机”字母的程序,并为用户提供最多6次猜测该字母的机会。
if ( Play != "y" || Play != "Y" )
编辑:完整代码
// This function displays game instructions, and returns nothing.
void Instructions();
// This function plays one game, and returns "W" if the player wins
// or "L" if the player runs out of guesses.
char Play();
//this function prompts the player to make a guess and returns that guess
char getLetter();
//The function returns 1 if the guess matches the solution and returns a 0 if they do not match
char guess();
// This function returns a random letter between "A" and "Z
char getAnswer();
int CompareLetters(char guess, char answer);
int main()
{
char answer;
//1. Greet the user and ask if they would like to play a guessing game.
printf("\nHello there!\nWould like to play a guessing game?Enter Y or N: \n");
scanf(" %c", &answer);
if(answer == 'y' || answer == 'Y')
Instructions();
{
printf("\nYou entered Y. Let's play!\n");
do{
}while (answer == 'y' || answer == 'Y');
}
printf("\nMaybe next time.\n");
printf("\nGoodBye for now.\n");
return -1;
}
void Instructions()
{
printf("I have a capital letter in mind. You have 6 chances to guess which letter I am \nthinking. I will let you know if you are too high or too low.\n");
printf("After each guess, you will be informed if your guess is too high or too low.\nGood luck!\n");
}
int PlayGuess(char answer)
{
int NumGuesses=0; int WinOrLose=0;
while (NumGuesses < MAX_GUESSES && WinOrLose==0);
{
//6. If the player guesses wrong for a 6th time, console them and let the program end with a return code of 1.
char guess;
guess = getLetter();
CompareLetters(guess,answer);
if(CompareLetters(guess,answer)==1)
{
WinOrLose = 1;
}
else
{
NumGuesses++;
}
}
if (WinOrLose==1)
{
return 1;
}
else
{
return 0;
}
}
//3. Generate a "random" character between 'A' and 'Z'. This will be the value the player will try to guess.
char getLetter()
{
char guess=0;
printf("Please enter your letter guess:", guess);
scanf(" %c",&guess);
return guess;
}
int CompareLetters(char guess, char answer)
{
if(guess == answer)
{
return 1;
}
else
{
////5. If the player does not guess the right answer, display whether the guess is "too high" or "too low".
if (guess < answer)
{
printf("Your guess is too low.");
}
else
{
printf("Your guess is too high.");
}
{
printf("\nDo you want to play again? Y or N: \n");
}
if ( Play != 'y' && Play != 'Y' )
printf("Thanks for playing.Goodbye!/n");
}
答案 0 :(得分:3)
Play
似乎是(单个)char
,而不是char
数组。因此,您应该使用'y'
代替"y"
。
if ( Play != 'y' || Play != 'Y' )
这里似乎也存在逻辑错误 - 大概你打算使用&&
而不是||
:
if ( Play != 'y' && Play != 'Y' )
编辑:您现在已经添加了其余的源代码。这里有一个很多的问题,但我会列出一些让你入门。
您对Instructions()
的调用不在大括号内,因此将有条件地调用Instructions()
,其余代码将无条件执行 。
if(answer == 'y' || answer == 'Y')
Instructions();
{
printf("\nYou entered Y. Let's play!\n");
这应该是:
if(answer == 'y' || answer == 'Y')
{
printf("\nYou entered Y. Let's play!\n");
Instructions();
您的do {} while
声明为空。它也是一个无限循环,因为答案的scanf
不在循环之内。
do{
}while (answer == 'y' || answer == 'Y');
您应该将scanf
移到循环中,然后添加对Play()
的调用。
与Play
中的CompareLetters
进行比较的if语句是不正确的(没有名为Play
的变量)并且位置错误(CompareLetters
不应该对此负责。)
您应该将其移至main
,更新并与我上面提到的answer
变量进行比较。
答案 1 :(得分:1)
在C中,双引号中的字符序列表示一个字符串,在内存中为const char *
。您的变量Play
包含一个char
,而不是char*
。告诉编译器使用char
常量的方法是在字符周围使用单引号,如下所示:
Play != 'Y'
答案 2 :(得分:0)
变量Play
正在使用char,因此请尝试使用''
。此外,""
用于char * literal。您可以尝试这样:
if ( Play != 'y' || Play != 'Y' )
而不是
if ( Play != "y" || Play != "Y" )