我的程序得到的结果不是我期望的,并且在不同的编译器上也有所不同。
我在三个编译器上尝试过,其中两个给出相同的结果。但是我想将这两个结果结合起来。
#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功能不起作用
答案 0 :(得分:3)
使用%d
格式说明符,您正在将int
读入iUserInput
。没错,但是然后您使用isdigit
来尝试查看数字是否在1
和10
之间。但是,此功能用于确定char
是否在'0'
和'9'
之间。这是不一样的-假设ASCII这些字符分别等于48
和57
。因此,您isdigit
最有可能检查输入的数字是否在48
和57
之间(尽管不能保证使用ASCII,因此使用不同的编码可能会导致不同的结果)。
相反,检查应为:
if((iUserInput >= 1) && (iUserInput <= 10)) {...}