我在这个项目上花了好几个小时想弄清楚这一点,但我已经到了脑死亡的地步,我读到的所有东西都让我感到困惑。
这个想法是输入一个数字,程序会告诉我这是对还是错。每一次,我输入一个数字后的结束响应都是这个数字太低了。
另外,最后的答案表明答案太低,同时也是正确的。
最后,这件事是假设再次问,如果输入的数字是不正确的,但我不知道如何做到这一点。
从字面上说,在这一点上,最微小的建议是非常感激的。这是一个漫长的,呻吟的夜晚。

#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作为整数参数,并删除这两个函数中的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()函数——你真的需要两个吗?你能把它简化成一个函数吗?

关于c - 猜数字游戏,每#低,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33114869/

10-11 20:20