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

09-用&&来设置取值范围

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

6.2.3 用&&来设置取值范围

&&运算符还允许建立一系列if else if else语句,其中每种选择都对应于一个特定的取值范围。程序清单6.6演示了这种方法。另外,它还演示了一种用于处理一系列消息的技术。与char指针变量可以通过指向一个字符串的开始位置来标识该字符串一样,char指针数组也可以标识一系列字符串,只要将每一个字符串的地址赋给各个数组元素即可。程序清单6.6使用qualify数组来存储4个字符串的地址,例如,qualify [1]存储字符串“mud tug-of-war\n”的地址。然后,程序便能够将cout、strlen()或strcmp()用于qualify [1],就像用于其他字符串指针一样。使用const限定符可以避免无意间修改这些字符串。

程序清单6.6 more_and.cpp

// more_and.cpp -- using the logical AND operator
#include <iostream>
const char * qualify[4] = // an array of pointers
{ // to strings
    "10,000-meter race.\n",
    "mud tug-of-war.\n",
    "masters canoe jousting.\n",
    "pie-throwing festival.\n"
};
int main()
{
    using namespace std;
    int age;
    cout << "Enter your age in years: ";
    cin >> age;
    int index;
    if (age > 17 && age < 35)
        index = 0;
    else if (age >= 35 && age < 50)
        index = 1;
    else if (age >= 50 && age < 65)
        index = 2;
    else
        index = 3;
    cout << "You qualify for the " << qualify[index];
    return 0;
}

下面是该程序的运行情况:

Enter your age in years: 87
You qualify for the pie-throwing festival.

由于输入的年龄不与任何测试取值范围匹配,因此程序将索引设置为3,然后打印相应的字符串。

程序说明

在程序清单6.6中,表达式age > 17 && age < 35测试年龄是否位于两个值之间,即年龄是否在18岁到34岁之间。表达式age >= 35 && age < 50使用<=运算符将35包括在取值范围内。如果程序使用age > 35 && age < 50,则35将被所有的测试忽略。在使用取值范围测试时,应确保取值范围之间既没有缝隙,又没有重叠。另外,应确保正确设置每个取值范围(参见本节后面的旁注“取值范围测试”)。

if else语句用来选择数组索引,而索引则标识特定的字符串。

取值范围测试

取值范围测试的每一部分都使用AND运算符将两个完整的关系表达式组合起来:

if (age > 17 && age < 35) // OK

不要使用数学符号将其表示为:

if (17 < age < 35) // Don't do this!

编译器不会捕获这种错误,因为它仍然是有效的C++语法。<运算符从左向右结合,因此上述表达式的含义如下:

if ( (17 < age) < 35)

但17 < age的值要么为true(1),要么为false(0)。不管是哪种情况,表达式17 < age的值都小于35,因此整个测试的结果总是true!