繁体   English   中英

因而isalpha( <mychar> )== true评估为false?

[英]isalpha(<mychar>) == true evaluates to false?

字符串temp等于我的调试器中的“ZERO:\\ t.WORD \\ t1”。 (我文件的第一行)

string temp = RemoveWhiteSpace(data);
int i = 0;
if ( temp.length() > 0 && isalpha(temp[0]) )
    cout << "without true worked" << endl;
if ( temp.length() > 0 && isalpha(temp[0]) == true )
    cout << "with true worked" << endl;

这是我的代码,用于检查temp的第一个字符是否为az,AZ。 第一个if语句将评估为true,第二个将评估为false。 为什么?!?!?! 即使没有“temp.length()> 0 &&”,我也试过这个,但它仍然评估为false。 它只是讨厌“== true”。 我唯一能想到的是isalpha()返回!= 0和true == 1.然后,你可以得到isalpha()== 2!= 1.但是,我不知道C ++是不是......奇怪的。

顺便说一句,我不需要知道“== true”在逻辑上毫无意义。 我知道。

输出是

without true worked

在Ubuntu 9.10上使用GNU GCC编译CodeBlock(如果这很重要)

如果为true,则*函数仅保证返回非零值,不一定是1.典型的实现是基于表的,表中的每个字符值都有一个条目,一组位定义哪个位意味着什么。 is *函数将只是与表值一起使用右边的位掩码,并返回该值,对于位位置0给出的任何类型,它只是值1。

例如:

#define __digit 1
#define __lower 2
#define __upper 4
extern int __type_table[];

int isdigit(int c) { 
    return __type_table[c+1] & __digit;
}

int isalpha(int c) { 
    return __type_table[c+1] & (__lower | __upper);
}

int islower(int c) { 
    return __type_table[c+1] & __lower;
}

int isupper(int c) { 
    return __type_table[c+1] & __upper;
}

其中__type_table定义为int __type_table[UINT_MAX+1]; 并将被初始化(例如) __type_table['0'+1] == __digit__type_table['A'+1] == __upper

如果您在意,“+1”部分是在表格的开头留下一个EOF (通常定义为-1)。

isalpha不返回true ,它返回非零值。 对于为C设计的API,这是很常见的。

请注意,在表达式isalpha(ch) == true ,子表达式true将提升为类型为int且值为1。

好吧,文档表明它返回零或非零,不一定只是假或真。 所以你最好检查一下(isalpha(temp [0])!= 0)。

不要isalpha(ch) == true ,但!!isalpha(ch) == true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM