猜数字游戏,每个#都很低

时间:2015-10-14 00:45:23

标签: c function loops

我已经在这个项目上花了好几个小时试图解决这个问题,但我已经到了脑死亡的地步,我读到的所有内容都让我感到困惑。

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

此外,最后的答案表明答案太低而且同时也是正确的。

最后,我想再次询问输入的数字是否不正确,但我不知道该怎么做。

从字面上看,目前非常赞赏最微小的建议。这是一个漫长而呻吟的夜晚。

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

}

2 个答案:

答案 0 :(得分: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);
    ...
}

这样你就可以将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