为什么我的C程序在不同的编译器中给出不同的输出?

时间:2019-06-19 08:58:22

标签: c

我的程序得到的结果不是我期望的,并且在不同的编译器上也有所不同。

我在三个编译器上尝试过,其中两个给出相同的结果。但是我想将这两个结果结合起来。

#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 个答案:

答案 0 :(得分:3)

使用%d格式说明符,您正在将int读入iUserInput。没错,但是然后您使用isdigit来尝试查看数字是否在110之间。但是,此功能用于确定char是否在'0''9'之间。这是不一样的-假设ASCII这些字符分别等于4857。因此,您isdigit最有可能检查输入的数字是否在4857之间(尽管不能保证使用ASCII,因此使用不同的编码可能会导致不同的结果)。

相反,检查应为:

if((iUserInput >= 1) && (iUserInput <= 10)) {...}