新手C学生在这里。
有人可以解释为什么isdigit()对于10+值返回true吗?
我正在做一个关于猜谜游戏的基本任务,必须使用isdigit()通知用户是否输入了1-10。
否则该程序似乎运行良好,我只是想知道isdigit()对于10+值返回true的原因。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
int main()
{
int iRandomNum = 0;
char cResponse = '0';
srand(time(NULL));
iRandomNum = (rand() % 10) + 1;
printf("\nGuess a number between 1 and 10: ");
scanf("%c", &cResponse);
if (!isdigit(cResponse) || cResponse<'0'+1)
printf("\nYou did not enter a number 1-10");
else if ((cResponse - '0') == iRandomNum)
printf("\nCorrect!");
else
{
printf("\nSorry, you guessed wrong\n");
printf("The correct guess was %d\n", iRandomNum);
}
return 0;
}
最佳答案
如果添加printf
记录cResponse
的值,该问题将很快变得明显:
printf("\nGuess a number between 1 and 10: ");
scanf("%c", &cResponse);
printf("cResponse is %c\n", cResponse);
输出:
Guess a number between 1 and 10: 10
cResponse is 1
如您所见,只有第一个字符存储在
cResponse
中(这很有意义,因为它只是一个字符),并且由于第一个字符是数字,因此您的isdigit()
调用返回true。如果要读取大于10的数字,可以改为读取
int
:int cResponse = 0;
printf("\nGuess a number between 1 and 10: ");
scanf("%d", &cResponse);
printf("cResponse is %d\n", cResponse); // prints '10' if I type '10'
请注意,在这种情况下您不能使用
isdigit()
,尽管您仍然可以使用if (cResponse >= 0 && cResponse <= 10)
轻松检查边界。关于c - isdigit()对于整数10及以上返回true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46230871/