Номер вне диапазона, дающий неожиданный вывод - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть игра с угадыванием чисел, где Игрок 1 вводит число, а Игрок 2 должен угадать это число. Если число, которое вводит игрок 2, превышает 1000, «печатается это число вне диапазона».

int player2(int number)
{
    int i, currentGuess;
    printf("Player 2, you have 10 guesses remaining\n");
    //For Player 2
    for (i = 1; i <= MAX_GUESS; i++) {

        int remaining = MAX_GUESS - i;
        printf("Enter your guess:\n");

        scanf_s("%i", &currentGuess);

        if (currentGuess > 1000) {
            printf("That number is out of range.\n");

        }

        else if (currentGuess > number) {
        printf("Too high.\n");
        printf("Player 2, you have %i guesses remaining\n", remaining);
        if (remaining == 0) {
            printf("Player 1 wins\n");
        }
    }


    else if (currentGuess < number) {
        printf("Too low.\n");
        printf("Player 2, you have %i guesses remaining\n", remaining);
        if (remaining == 0) {
            printf("Player 1 wins\n");
        }
    }

    else if (currentGuess = number) {
        printf("Player 2 wins\n");
        return 0;

    }

}

return i;


}

Если игрок 2 вводит 1001, правильное сообщение «Это число вне диапазона». будет дано. Проблема в том, что если игрок 2 вводит 11111111, выводится сообщение «Слишком низко». дается вместо «Это число вне диапазона». Почему это так?

1 Ответ

1 голос
/ 26 февраля 2020

Возможно, у вас здесь целочисленное переполнение. Ваш номер слишком велик, и он интерпретируется как отрицательное число.

Измените объявление ваших переменных на:

unsigned int i, currentGuess;

Кроме того, вы можете ограничить условие сканирования, чтобы избежать такой проблемы:

scanf_s("%5d", &currentGuess);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...