为什么int(char)的比较不起作用?

时间:2014-02-07 18:29:50

标签: c++

我试图通过以下方式检查整数是大写还是小写还是数字

if(int('A')<=int(M[i])<=int('Z')) cout<<"upper"<<endl;
if(int('a')<=int(M[i])<=int('z'))  cout<<lower"<<endl;
if (int('0')<=int(M[i])<=int('9')) cout<<"digit"<<endl;

但是对于任何字符,所有if语句都返回true,因此所有3个字符串都是为任何字符打印的。为什么我无法比较此测试中转换的int与chars? `

1 个答案:

答案 0 :(得分:2)

C ++不支持链式比较

a <= b <= c

被解析为

(a <= b) <= c

即。你将第一次比较的结果与c进行比较,这是允许的,因为比较的结果可以隐式转换为整数(从而隐藏逻辑错误)。

用于范围检查的C ++解决方案是

(a <= b) && (b <= c)

但当然你要注意,如果b是一个带有副作用的表达式,它可以被评估两次,因此可能需要将其值存储在变量中以使用此表单。