新手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/

10-09 08:58