首页 > 解决方案 > 超出范围的数字给出了意外的输出

问题描述

我有这个数字猜谜游戏,玩家 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,输出消息“太低”。而不是“这个数字超出范围”。为什么会这样?

标签: cloops

解决方案


你可能在这里有一个整数溢出。您的数字太大,它被解释为负数。

将变量的声明更改为:

unsigned int i, currentGuess;

此外,您可以限制您的扫描子句以避免此类问题:

scanf_s("%5d", &currentGuess);

推荐阅读