我已经在这个项目上花了好几个小时试图解决这个问题,但我已经到了脑死亡的地步,我读到的所有内容都让我感到困惑。
想法是输入一个数字,程序会告诉我它是对还是错。每次输入数字后的结束响应都是数字太低。
此外,最后的答案表明答案太低而且同时也是正确的。
最后,我想再次询问输入的数字是否不正确,但我不知道该怎么做。
从字面上看,目前非常赞赏最微小的建议。这是一个漫长而呻吟的夜晚。
#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();
}
答案 0 :(得分:4)
您实际上并没有将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()
函数 - 你真的需要两个吗?你能把它减少到一个功能吗?
答案 1 :(得分:2)
我在程序中看到的最基本的问题是你没有将值传递给函数。每个功能都只是在工作本身和价值,或者我应该说&#39;数字&#39;它必须与之合作,而不是传递给它们。
您可以使用全局变量或直接传递值。这就是我要做的事情:
输入功能:
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 guess;}
随机数生成器功能:
int randomNumber(){
int range;
srand(time(NULL));
range = (20 - 1) + 1;
number = rand() % range + 1;
return number;}
答案功能:(你真的不需要2个功能)
int Answer(int guess, int number){
int counter=0;
if(guess < number)
{
printf("Try again, your guess is too low\n");
counter=1;
}
else if(guess > number)
{
printf("Give it another try, your guess was a bit to high\n");
counter=1;
}
else if(guess == number)
{
printf("Great job! That time you got it right!\n");
counter=2;
}
return counter;}
现在您的所有函数都可以接受变量,修改主函数
int main(){
int number=0;
int guess=0;
int answr=0; // This does not have to exist but since your doing a return.
welcomeMessage();
number=randomNumber();
guess=guessInput();
Do {
answr=Answer(guess,number);
}(while answr<2)
}
因此,当计数器达到2时,表示答案是正确的,当用户猜到正确的答案时,while循环将停止。
PS:你可能需要稍微改进我的代码,因为我也处于脑死模式atm。 :d