13-范围
7.3.4 范围
&& 运算符可用于测试范围。例如,要测试 score 是否在 90 ~ 100 的范围内,可以这样写:
if (range >= 90 && range <= 100)
printf("Good show!\n");
千万不要模仿数学上的写法:
if (90 <= range <= 100) // 千万不要这样写!
printf("Good show!\n");
这样写的问题是代码有语义错误,而不是语法错误,所以编译器不会捕获这样的问题(虽然可能会给出警告)。由于<=运算符的求值顺序是从左往右,所以编译器把测试表达式解释为:
(90 <= range) <= 100
子表达式 90 <= range 的值要么是 1 (为真),要么是 0 (为假)。这两个值都小于 100 ,所以不管 range 的值是多少,整个表达式都恒为真。因此,在范围测试中要使用 && 。
许多代码都用范围测试来确定一个字符是否是小写字母。例如,假设 ch 是 char 类型的变量:
if (ch >= 'a' && ch <= 'z')
printf("That's a lowercase character.\n");
该方法仅对于像ASCII这样的字符编码有效,这些编码中相邻字母与相邻数字一一对应。但是,对于像EBCDIC这样的代码就没用了。相应的可移植方法是,用 ctype.h 系列中的 islower() 函数(参见表7.1):
if (islower(ch))
printf("That's a lowercase character.\n");
无论使用哪种特定的字符编码, islower() 函数都能正常运行(不过,一些早期的编译器没有 ctype.h 系列)。