2015-10-14 117 views
0

我一直在这个项目上花了几个小时试图弄清楚这一点,但我到了脑死亡的地步,我读的所有东西都让我感到困惑。猜数字游戏,每#低

这个想法是输入一个数字,程序会告诉我它是对还是错。每次输入数字后的最终响应都是数字太低。

另外,最终答案指出答案太低,而且它在同一时间是正确的。

最后,这件事情是假设再次问是否输入的数字是不正确的,但我不知道如何做到这一点。

字面上,最小的建议是非常赞赏在这一点上。这是一个漫长而呻吟的夜晚。

#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(); 

} 
+1

您正在为每个函数定义新变量 - 这些变量不是“全局”的,只存在于这些函数中。 – teppic

+1

每次打电话给'rand'时都不要调用'srand'。在程序启动时调用一次。 –

+0

@JonathonReinhart对不起,你能解释一下吗?还是可能给我看?我不太明白。 –

回答

4

你不是真正的guess的值传递给wrongAnswer()correctAnswer()guess在这两个函数中未初始化,并且不包含存储在guessInput()中的值。这就是为什么wrongAnswer告诉你这个猜测太低,correctAnswer告诉你它是正确的。

您还需要删除这些函数中的number声明。你现在有一个全球的number存储随机数,但在你的函数中声明的新的number变量将优先 - 它是未初始化的,不包含你认为它的随机数。

您可能需要调整您的wrongAnswer()correctAnswer()功能采取guess作为整数参数,并且在这两个函数中取出guessnumber声明。像

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); 
    ... 
} 

这样你路过猜测的价值,你的两个功能,使他们能够真正计算的数量是否正确或不正确的。

你也想看看你的返回函数的值。现在他们并没有真正告诉你什么,并且无论如何他们都返回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()的功能 - 你真的需要两个?你可以减少到一个功能?

+0

感谢所有这些。可悲的是,它需要我有两个错误和正确答案的功能。最好我想简化成一个,但这是不允许的。 –

2

我在程序中看到的最基本的问题是您没有将值传递给函数。每一个功能本身就是有效的,或者我应该说它必须使用的“数字”没有被传递给它们。

您可以使用全局变量或直接传递值。这是我会做:

输入功能:

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;} 

既然您所有的函数都可以接受变量,那么修改Main函数

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

+0

非常感谢你。我同意将答案函数降至一个会更简单,但指示说我们必须将它们分为两个,一个是正确的,一个是不正确的。 –

+0

好吧,如果这是一个要求,你可以用最初的想法,并在while循环中具有两个函数(修改我最喜欢创建的方式)。确保结果有返回值,代码将执行这两个函数,并且一旦满足正确答案的返回值,就可以使循环退出。 让我知道你是否想让我为你创建一个代码片段。 –