isdigit() 不能在一个简单的程序中工作?

isdigit() isn't working in a simple program?

#include<iostream.h>
#include<conio.h>
#include<ctype.h>
void main()
{
    clrscr();
    int a;
    cout<<"Enter a digit";
    cin>>a;
    if(isdigit(a))
    {
         cout<<"You have entered a digit";
    }
    else
    {
         cout<<"Not a digit";
    }
    getch();
}

代码显示没有错误,但每次我输入一个数字时它显示 "Not a digit"。

int a;
std::cin >> a;

此代码(或您的有点过时的变体)从控制台读取文本并将该文本转换为整数值。因此,如果您在控制台键入 0a 的值将是 0,而不是 '0'isdigit 告诉您传递给它的字符值是否代表一个数字,而 0 不代表,所以结果几乎肯定是正确的。如果您改为将该值读入 char 类型的变量,您将得到您期望的行为。

char a;
std::cin >> a;

使用cin>>a提取一个整数,将从输入中读取一个数字(几位数字)并将其转换为二进制值。

例如,如果您键入 10,则 a 的值将为 10。如果您随后将此值解释为 isdigit(a) 中的字符,它将是理解为 ascii/ansi/utf8 等同于 10,即 '\n',这显然不是数字。

要获得您期望的结果,请将 a 设为字符。