3.1.2 嵌套的if语句(1)
当if语句中的条件为真时,要执行的语句同样可以是if语句。这种结构称作嵌套的if语句。只有外部if语句的条件为true时,才测试内部if语句的条件。嵌套在一个if语句内部的if语句同样可以再包含另外一个嵌套的if语句。只要知道自己在做什么,通常可以无限制地嵌套if语句。
试一试:使用嵌套的if语句
下面的示例包含嵌套的if语句。
- // Ex3_01.cpp
- // A nested if demonstration
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- int main()
- {
- char letter(0); // Store input in here
- cout << endl
- << "Enter a letter: "; // Prompt for the input
- cin >> letter; // then read a character
- if(letter >= 'A') // Test for 'A' or larger
- {
- if(letter <= 'Z') // Test for 'Z' or smaller
- {
- cout << endl
- << "You entered a capital letter."
- << endl;
- return 0;
- }
- }
- if(letter >= 'a') // Test for 'a' or larger
- {
- if(letter <= 'z') // Test for 'z' or smaller
- {
- cout << endl
- << "You entered a small letter."
- << endl;
- return 0;
- }
- }
- cout << endl << "You did not enter a letter." << endl;
- return 0;
- }
示例说明
该程序开头照例是注释行,然后是#include语句,以嵌入支持输入/输出的头文件,再后面是属于std名称空间的cin、cout和endl的using声明。main()函数体中的第一个动作是提示用户输入某个字母,该字母存储在名为letter的char型变量中。
输入后面的if语句检查输入的字符是否大于等于'A'。小写字母的ASCII码(97~122)大于大写字母的ASCII码(65~90),所以输入小写字母也将使程序执行第一个if块,因为对任何字母而言,条件表达式(letter >='A')都将返回true。在这种情况下,程序将执行检查输入是否小于等于'Z'的嵌套if。如果该字母小于等于'Z',那么当然是个大写字母,因此将显示相应的消息。我们的任务至此已经完成,于是执行return语句来结束程序。这两条语句都被大括号包围,因此当嵌套的if条件返回true时都会执行。
下一条if语句检查输入的字符是否是小写字母,使用的机制与第一个if语句本质上相同,然后显示消息并返回。
如果输入的字符不是字母,则执行最后一个if块后面的输出语句。该语句显示一条消息,大意是输入的字符不是字母,然后执行return语句。
可以看出,嵌套if语句与输出语句之间的关系因使用了缩进而非常容易理解。
本示例的典型输出如下:
- Enter a letter: T
- You entered a capital letter.
只需要在检查输入是否为大写字母的if块后添加一条语句,就能将大写字母变为小写字母:
- if(letter >= 'A') // Test for 'A' or larger
- if(letter <= 'Z') // Test for 'Z' or smaller
- {
- cout << endl
- << "You entered a capital letter.";
- << endl;
- letter += 'a' - 'A'; // Convert to lowercase
- return 0;
- }
上面的代码添加了一条语句。这条将大写字母转换为小写字母的语句使变量letter的值增加了,增加的量是'a'-'A'。这是正确的,因为A~Z与a~z的ASCII码是两组连续的数值,分别是65~90和97~122,所以表达式'a'-'A'就是为得到等价小写字母而需要在大写字母的代码值上增加的数值,即97-65=32。因此,如果在'K'的ASCII码值75上增加32,就得到'k'的ASCII码值107。
在这里,同样可以使用等价的ASCII码值来表示字母,但通过使用字母,我们能够确保所编写的代码在不使用ASCII字符集的计算机上也能工作,唯一前提是大写和小写字母都是用连续的数值序列表示的。
有一个将字母转换为大写字母的标准库函数,因此我们通常不必自己编写这种代码。该函数的名称为toupper(),位于标准头文件ctype中。当专门学习如何编写函数时,将介绍更多的标准库函数。