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;
此代码(或您的有点过时的变体)从控制台读取文本并将该文本转换为整数值。因此,如果您在控制台键入 0
,a
的值将是 0
,而不是 '0'
。 isdigit
告诉您传递给它的字符值是否代表一个数字,而 0
不代表,所以结果几乎肯定是正确的。如果您改为将该值读入 char
类型的变量,您将得到您期望的行为。
char a;
std::cin >> a;
使用cin>>a
提取一个整数,将从输入中读取一个数字(几位数字)并将其转换为二进制值。
例如,如果您键入 10
,则 a
的值将为 10。如果您随后将此值解释为 isdigit(a)
中的字符,它将是理解为 ascii/ansi/utf8 等同于 10,即 '\n'
,这显然不是数字。
要获得您期望的结果,请将 a
设为字符。
#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;
此代码(或您的有点过时的变体)从控制台读取文本并将该文本转换为整数值。因此,如果您在控制台键入 0
,a
的值将是 0
,而不是 '0'
。 isdigit
告诉您传递给它的字符值是否代表一个数字,而 0
不代表,所以结果几乎肯定是正确的。如果您改为将该值读入 char
类型的变量,您将得到您期望的行为。
char a;
std::cin >> a;
使用cin>>a
提取一个整数,将从输入中读取一个数字(几位数字)并将其转换为二进制值。
例如,如果您键入 10
,则 a
的值将为 10。如果您随后将此值解释为 isdigit(a)
中的字符,它将是理解为 ascii/ansi/utf8 等同于 10,即 '\n'
,这显然不是数字。
要获得您期望的结果,请将 a
设为字符。