我在这个项目上花了好几个小时想弄清楚这一点,但我已经到了脑死亡的地步,我读到的所有东西都让我感到困惑。
这个想法是输入一个数字,程序会告诉我这是对还是错。每一次,我输入一个数字后的结束响应都是这个数字太低了。
另外,最后的答案表明答案太低,同时也是正确的。
最后,这件事是假设再次问,如果输入的数字是不正确的,但我不知道如何做到这一点。
从字面上说,在这一点上,最微小的建议是非常感激的。这是一个漫长的,呻吟的夜晚。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int number;
//new function
void welcomeMessage(){
printf("Welcome to my new guessing game!\n");
printf("Let's get started!\n");
}
//new function
int randomNumber(){
int range;
srand(time(NULL));
range = (20 - 1) + 1;
number = rand() % range + 1;
return 0;
}
//new function
int guessInput(){
int guess, range;
printf("I'm thinking of a number between 1 and 20\n");
printf("Care to give it a guess? Be careful! You only get 4 tries!\n");
scanf("%d", &guess);
return 0;
}
//new function
int wrongAnswer(){
int guess, number;
if(guess < number)
{
printf("Try again, your guess is too low\n");
return 0;
}
else if(guess > number)
{
printf("Give it another try, your guess was a bit to high\n");
return 0;
}
return 0;
}
//new function
int correctAnswer(){
int guess, number;
if(guess == number)
printf("Great job! That time you got it right!\n");
return 0;
}
int main(){
welcomeMessage();
randomNumber();
guessInput();
wrongAnswer();
correctAnswer();
}
最佳答案
实际上,您并没有将guess
的值传递给wrongAnswer()
或correctAnswer()
。guess
在这两个函数中未初始化,并且不包含存储在guessInput()
中的值。这就是为什么wrongAnswer
告诉你猜测太低,而correctAnswer
告诉你它是正确的。
您还需要删除这些函数中的number
声明。现在有一个存储随机数的全局number
,但函数中声明的新number
变量将优先——它未初始化,并且不像您想象的那样包含随机数。
您可能需要调整wrongAnswer()
和correctAnswer()
函数,将guess
作为整数参数,并删除这两个函数中的guess
和number
声明。有点像
int wrongAnswer(int guess);
int correctAnswer(int guess);
您还可以考虑让
guessInput()
函数返回guess
的值。试试像这样的int guessInput()
{
int guess;
printf("I'm thinking of a number between 1 and 20\n");
printf("Care to give it a guess? Be careful! You only get 4 tries!\n");
scanf("%d", &guess);
return guess;
}
int main()
{
...
int guess = guessInput();
wrongAnswer(guess);
correctAnswer(guess);
...
}
这样,您将guess的值传递给您的两个函数,这样它们就可以实际评估这个数字是正确的还是错误的。
您还需要查看返回函数的值。现在他们什么都没告诉你,不管怎样都会返回0。如果猜测是正确的,考虑将其更改为返回0;如果猜测是错误的,则返回1。
int correctAnswer(int guess)
{
if(guess == number) {
printf("Great job! That time you got it right!\n");
return 0;
} else {
return 1;
}
}
有了这些信息,您可以创建一个
while
循环来不断地请求用户输入,直到他们输入正确的答案。有点像int main()
{
...
int is_correct = 1, is_wrong = 1;
int guess;
while (is_correct == 1) {
guess = guess_input();
is_wrong = wrongAnswer(guess);
is_correct = correctAnswer(guess);
}
...
}
上面的
while
循环将永远调用这三个函数中的每一个,直到用户猜测到正确的输入。它评估is_correct == 1
,不断检查is_correct
的值,并重复自身。当is_correct == 0
时,循环将中断,程序将终止。这就是我上面提到的返回值的来源——返回值0表示正确的答案,并允许您的程序停止。返回值1将重复循环。有其他方法可以做到这一点,但在你开始的时候可能会有帮助。希望这能帮到你。我也会考虑重新设计你的
wrongAnswer()
和correctAnswer()
函数——你真的需要两个吗?你能把它简化成一个函数吗?关于c - 猜数字游戏,每#低,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33114869/