Почему моя программа на C дает разные результаты в разных компиляторах? - PullRequest
1 голос
/ 19 июня 2019

Результат от моей программы не тот, который я ожидаю, и он отличается на разных компиляторах.

Я пробовал его на трех компиляторах, два из которых дают одинаковый результат.Но я хочу получить комбинацию из двух результатов.

#include <stdio.h>
#include <ctype.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    int iRandomNum = 0;
    int iUserInput = 0;
    const int VIP = 7;
    srand(time(NULL));
    iRandomNum = (rand() % 10) + 1;

    printf("\nGuess a number between 1 to 10.\n Make a wish and type in the number.\n");

    scanf("%d", &iUserInput);

    if(isdigit(iUserInput))
    {
         printf("\n\nYou did not enter a digit between 1 to 10.\n\n");
    }
    else
    {
        if(iUserInput==iRandomNum || iUserInput==VIP)
            printf("\n\nYou guessed it right!\n\n\n");
        else
            printf("\n\nSorry the right answer was %d.\n\n\n", iRandomNum);
    }
    return 0;
}

Когда я выбираю любое число, программа должна предупреждать меня, только если я не выбрал правильное число в этой игре на угадывание чисел.Но в случае с 7 у нас всегда есть правильный ответ.Это происходит в двух онлайн-компиляторах.Но в Clang, когда я делаю это & ​​не работает.Функция isdigit не работает тогда

1 Ответ

3 голосов
/ 19 июня 2019

Используя спецификатор формата %d, вы читаете int в iUserInput.Это правильно, но затем вы используете isdigit, чтобы попытаться увидеть, находится ли число между 1 и 10.Однако эта функция предназначена для определения, находится ли char между '0' и '9'.Это не то же самое - при условии, что в ASCII эти символы равны 48 и 57 соответственно.Таким образом, вы isdigit проверяете, скорее всего, выясняете, находится ли введенное число между 48 и 57 (хотя нет гарантии, что используется ASCII, поэтому другое кодирование может привести к разным результатам).

Вместо этого чек должен быть:

if((iUserInput >= 1) && (iUserInput <= 10)) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...