Угадайка-застрял в петле.

Я работаю над программой игры в угадайку. Главная функция просит пользователя угадать число, и если это число не соответствует правильному предположению, оно отправляется другой функции, которая сообщает пользователю, если это число слишком высоко или слишком низко. Затем вторая функция запрашивает у пользователя другое предположение, и это предположение отправляется обратно в первую функцию.

Мой код попадает в ловушку во второй функции и не появляется, чтобы выйти из нее. Я не знаю, что изменить.

#include <stdio.h>

int guess(int num);

int main(void)
{
    int units;  

    printf("How many legs on a wonderwump??n");
    scanf_s("%d", &units);
    while (units != 56)
    {
        guess(units);
    }
    printf("Great guess!n");
    return 0;
}

int guess(int num)
{

    if (num > 56)
    {
        printf("Too high of a guess! Try again!");
    }
    else // (num < 56)
    {
        printf("Too low of a guess! Try again!");
    }

return scanf_s("%d", &num);

}

3 ответа

  1. Вы должны сбрасывать unitsзначение после каждого вызова второй функции, потому что сейчас она никогда не меняется.

    Так измениться

    while (units != 56) {
      guess(units);
    }
    

    к

    while (units != 56) {
      units = guess(units);
    }
    
  2. Ваш код неверен. Замените guessфункцию на:

    int guess(int num)
    {
    
        if (num > 56)
        {
            printf("Too high of a guess! Try again!");
            return 1;
        }
        else if (num < 56)
        {
            printf("Too low of a guess! Try again!");
            return 1;
        } else 
            return 0;
    }
    

    и

    while (units != 56)
    {
        guess(units);
    }
    

    должно быть

    while (1)
    {
        if(guess(units) == 0)
           break;
    }
    
  3. guess(units)При передаче переменной по значению (значение копируется), вы можете отправить ее по ссылке с guess(&units):

    #include <stdio.h>
    
    void guess(int* num);
    
    int main(void)
    {
        int units;  
    
        printf("How many legs on a wonderwump??\n");
        scanf("%d", &units);
        while (units != 56)
        {
            guess(&units);
        }
        printf("Great guess!\n");
        return 0;
    }
    
    void guess(int* num)
    {
        if (*num > 56)
            printf("Too high of a guess! Try again!\n");
        else // (num < 56)
            printf("Too low of a guess! Try again!\n");
        scanf("%d", num);
    }