【发布时间】:2013-06-30 15:20:39
【问题描述】:
谁能解释为什么isdigit 返回2048 如果为真?我是ctype.h 图书馆的新手。
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}
【问题讨论】:
-
因为 "C" 没有 "bool" 类型,但它有布尔的概念,例如 "0" 为 "false",其他均为 "true",而 2048 != 0 所以这是真的。
-
C 确实有
bool类型。更准确地说,它有一个名为_Bool的内置布尔类型,以及标准头<stdbool.h>中的一个宏定义#define bool _Bool。但这是 1999 年 ISO C 标准添加的,isdigit()早于它。 -
顺便说一句:在其他系统上,可能会得到 2048 以外的非零值。
-
顺便说一句。如果您真的希望 true/false 为 1 或 0,只需使用
!!解决方法:printf("%d", !!isdigit(c));