C++ if语句嵌套使用方法详解

一个 if 或 if-else 语句可以放在另一个 if 或 if-else 语句中,这种结构称为嵌套 if,它允许测试多个条件来确定究竟应该执行哪个代码块。

例如,有这么一个银行程序,需要确定银行客户是否有资格获得特别低利率的贷款。要符合资格,必须存在以下两个条件:
  1. 客户必须有工作。
  2. 客户必须刚从大学毕业(过去两年)。

图 1 显示了可用于此类程序的算法的流程图。

贷款资格审查流程图
图 1 贷款资格审查流程图

如果在图 1 中遵循执行流程,则可以看到第一个被测试的表达式为 employed = 'Y'。如果此表达式为 false,说明客户没有工作,则不需要执行任何其他测试,因为已经知道客户不符合特殊利率资格了,于是显示"You must be employed to qualify."(您必须有工作才能获得资格)。

但是,如果表达式为 true,则还需要测试第二个条件,也就是通过一个嵌套的决策结构来测试表达式 recentGrad = 'Y'。如果第二个表达式为 false,则客户仍不符合条件。 于是显示"You must have graduated from college in the past two years to qualify."(您必须在过去两年内刚从大学毕业才能获得资格);如果第二个表达式为 true,则客户有资格获得特别低利率的贷款,显示结果为"You qualify for the special interest rate."(您有资格获得特别低利率贷款)。

下面的程序显示了与流程图的逻辑对应的代码。它在一个 if-else 语句中嵌套了另外一个 if-else 语句。
//This program determines whether a loan applicant qualifies for
//a special loan interest rate. It uses nested if-else statements.
#include <iostream>
using namespace std;

int main()
{
    char employed,recentGrad;
    cout << "Are you employed?(Y/N) ";
    cin >> employed;
    cout << "Have you graduated from college in the past two years?(Y/N) ";
    cin >> recentGrad;
    //Determine the applicant1s loan qualifications
    if (employed == 'Y')
    {
        if (recentGrad == 'Y') // Employed and a recent grad
        {
            cout << "You qualify for the special interest rate.\n";
        }
        else    // Employed but not a recent grad
        {
            cout << "You must have graduated from college in the past two years to qualify for the special interest rate.\n";
        }
    }
    else // Not employed
    {
        cout << "You must be employed to qualify for the "<<"special interest rate. \n";
    }
    return 0;
}
程序运行结果:

Are you employed?(Y/N) N
Have you graduated from college in the past two years?(Y/N) Y
You must be employed to qualify for the special interest rate.


仔细研究一下该程序。从第14 行开始的 if 语句测试了表达式 employed == 'Y'。如果该表达式为 true,则执行从第 16 行开始的内部if语句。但是,如果该表达式的值为 false,则程序跳转到第 25 行,执行外部 else 块中的语句。

在调试使用嵌套 if-else 语句的程序时,重要的是要知道哪个 if 语句与 else 语句一起使用。正确匹配每个 else 与 if 的规则是这样的:一个 else 匹配与其最近的上一个 if 语句,并且该 if 语句没有自己的 else。当语句正确缩进时,这更容易看出来。

快速识别嵌套 if-else 语句中 if 和 else 的匹配
图 2 快速识别嵌套 if-else 语句中 if 和 else 的匹配

图 2 显示了类似于此程序第 14〜28 行的代码。它说明了每个 else 如何找到匹配的 if。这些视觉线索很重要,因为嵌套 if 语句可能非常长而复杂。