正如我们在前面的教程中(如 47. if 和 else 连用)见到的那样,if 语句中可以嵌套 if 语句。例如:
if ( condition1 )
{
if ( condition2 )
/* 整个 if else if ... else 结构只算是一个语句,所以这里可以不加大括号 */
if ( condition3 )
{
/* ... ... */
}
else if ( condition4 )
{
/* ... ... */
}
else
{ /* 这里的大括号也可以去掉。后面的代码中很多地方都可以不用大括号 */
if ( condition5 )
{
/* ... ... */
}
else
{
/* ... ... */
}
}
for ( exp1; exp2; exp3 )
{
if ( condition6 )
{
/* ... ... */
}
}
while ( condition7 )
{
if ( condition8 )
{
/* ... ... */
}
}
do
{
if ( condition9 )
{
/* ... ... */
}
} while ( condition10 );
}
如上例所示,if 语句中不止可以嵌套 if 语句,也可以嵌套循环语句;循环语句中也可以嵌套 if 语句。其实,我们前面说的 if else if ... else 就是 if 语句嵌套。上例中,虽然 if ( condition2 ) 后面没必要加大括号,但我建议最好还是加上。加上大括号可以使代码的结构更加清晰,易于理解,特别是语句非常长的时候(如本例,if ( condition2 ) 后的语句非常长!)。此外,加大括号还有一个好处,就是如果我们以后需要添加更多语句到 if 之下时,就不用怕会忘记加大括号,因为大括号已经存在了。例如:
if ( condition )
{
printf("abcd\n");
}
当我们需要再加一句 printf("efg\n"); 到该 if 结构之下时,就不必担心会忘掉给它加上大括号,毕竟大括号已经存在了。
if ( condition )
{
printf("abcd\n");
printf("efg\n");
}
也许你会觉得,我怎么可能会忘掉加大括号呢?当然,对于上面这个简单的例子来说,你很可能不会犯这种低级错误。但假设 if 之下是一个非常长而复杂的 if 语句呢?就好像文章开头的那个例子那样,你就难保不会忘掉了吧!所以我推荐写 if 语句的时候顺便把大括号也写上,无论是否有必要。这个道理对循环语句同样成立。下面我们通过一个简单的例子学习 if 语句嵌套:
/*--------------------------------------------------------------
| 作者: Antigloss @ http://stdcpp.cn @ 蚂蚁的 C/C++ 标准编程
|
| 功能: 演示 if 语句嵌套
-------------------------------------------------------------*/
if ( gender == MALE )
{
if ( age < 14 )
{
printf("Hey! Boy.\n");
}
else if ( age > 14 )
{
printf("Hi! Guy.\n");
}
/* ... ... */
}
else
{
/* ... ... */
}
其实这个例子的结构已经很清晰了,我想没必要详细讲吧。如果 gender == MALE 成立,则进入该 if 下的程序块(即复合语句),继续判断 age 的值,根据 age 的值选择要输出的内容;如果 gender == MALE 不成立,则执行 else 下的程序块。
参考资料:C Primer 5th Edition
本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。