当前位置:嗨网首页>书籍在线阅读

13-范围

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.3.4 范围

&& 运算符可用于测试范围。例如,要测试 score 是否在 90100 的范围内,可以这样写:

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 的值是多少,整个表达式都恒为真。因此,在范围测试中要使用 &&

许多代码都用范围测试来确定一个字符是否是小写字母。例如,假设 chchar 类型的变量:

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 系列)。