isdigit()在C中的计算结果不是真的

isdigit()在C中的计算结果不是真的,c,C,我现在试了半个小时都没有成功。。。 它一定很简单,但我不知道我做错了什么:isdigit()的计算结果不是true #include <stdio.h> #include <ctype.h> main() { int a = 2; if (isdigit(a)) { printf("\ncorrect\n"); } else { printf("\nnot correct\n"); }//end if }// end main 没有成功

我现在试了半个小时都没有成功。。。 它一定很简单,但我不知道我做错了什么:
isdigit()
的计算结果不是
true

#include <stdio.h>
#include <ctype.h>

main()
{

int a = 2;

if  (isdigit(a)) 
{   
   printf("\ncorrect\n");
}
else
{
    printf("\nnot correct\n");
}//end if


}// end main
没有成功。。。
注意:它确实可以编译,我通过插入各种不同的打印语句来确保。

您有
int
2。它不代表字符“2”
2因为字符只是“文本开头”字符(不是数字)

你需要

isdigit('2')
isdigit()
指示参数的值是否表示ASCII数字;也就是说,它在48到57之间。参见参考图表

因此
isdigit(2)
正确返回0,因为整数值2不在范围内


如果将代码更改为
isdigit('2')
,则会得到预期的结果,因为ASCII字符
2
的值为50。

您误解了
isdigit
的用法

int a = '2';
isdigit(a);

如果您向它传递一个数字,比如说
isdigit(2)
,它将
2
作为当前区域设置字符集中字符的代码(例如,ASCII代码
2
STX
,文本的开头,显然不是数字)。

更改
int a=2
字符a='2'
inta='2'请参见卸下isdigit。
简单地写下:-

if((a))
printf("correct");

else
printf("wrong");

'2'
是一个
int
too什么使ASCII值为2的字符“不可读”?这是一个控制字符,是的。。。但它仍然有一个符号,看起来像这样:
。这里唯一的事实是它不是一个数字。我相信控制字符通常不会显示。我看不出“文本开头”是怎么一个符号。@Paddy被更正为更精确的
isdigit
,它的原型实际上是
intisdigit(int)
。所有
iswhater()
函数系列的原型都采用
int
参数。使用时,您倾向于将
char
隐式转换为
int
,这是一个附带的事实。
isdigit
将其参数解释为当前区域设置字符集中字符的代码,不一定是ASCII。@EricPostChil感谢您提供了更精确的解释。我更新并改进了我的答案。“isdigit()”用于ASCII字符,而不是二进制整数<代码>isdigit('2')==true
isdigit(2)=false
@palsm4
isdigit()
适用于所有
无符号字符
EOF
。C11 7.4.1在所有情况下,参数均为int,其值应表示为无符号字符或等于宏EOF的值。如果参数有任何其他值,则行为是未定义的。我刚刚意识到这是一个多么糟糕的示例,但我得到了我想要的答案,现在理解了
isdigit()
函数,thx to al@paulsm4:更具体地说,它用于确定指定的字符是否表示执行字符集中当前区域设置中的数字。不要将
isdigit()
的结果与任何内容进行比较。如果参数是一个数字,它将返回一些任意的非零(即true)结果。直接使用它作为条件(正如您已经做的那样)。并确保参数要么在
无符号字符
的范围内,要么等于
EOF
(后者不是特别有用)。thx对于所有好的答案,我不得不在这里做出选择,接受众多答案中的一个…要找到你的问题的任何高质量答案,都是很难的选择。这不是我的第一选择。大多数答案都很好。我喜欢这个,因为它指出它可以是
chara='2'
inta='2'使用
scanf()时很方便
请注意,传递给
isdigit()
宏(以及所有其他类型检查宏)的参数应为
int
类型,并且该值应适合
无符号字符
。还请注意,在某些系统上,
char
可能是有符号类型。(字符文字是
int
类型的正值)。这应该如何解决这个问题?我的代码片段只是一个符号,当然我不只是想测试变量是否有值。。。
if((a))
printf("correct");

else
printf("wrong");