3.1.2 嵌套的if语句(2)
扩展的if语句
迄今为止,我们所使用的if语句都仅在指定的条件返回true时才执行某些语句,之后,程序将按顺序执行下一条语句。另一种if版本是条件返回true时执行一条语句,而条件返回false时执行另一条语句。之后,程序将按顺序执行下一条语句。如第2章中所述,语句块总是能够代替一条语句,该原则同样适用于if语句。
试一试:扩展的if语句
下面的示例包含扩展的if语句:
- // Ex3_02.cpp
- // Using the extended if
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- int main()
- {
- long number(0L); // Store input here
- cout << endl
- << "Enter an integer number less than 2 billion: ";
- cin >> number;
- if(number % 2L) // Test remainder after division by 2
- cout << endl // Here if remainder 1
- << "Your number is odd." << endl;
- else
- cout << endl // Here if remainder 0
- << "Your number is even." << endl;
- return 0;
- }
该程序的输出如下:
- Enter an integer less than 2 billion: 123456
- Your number is even.
示例说明
将输入值读入number之后,我们通过求出除以2之后的余数(使用第2章学习的求余数运算符%)来测试输入值,并使用余数作为执行这条if语句的条件。在这种情况下,if语句的条件返回的是整数,而不是bool值。if语句将条件返回的非零值解释为true,将零值解释为false。换句话说,这条if语句的条件表达式
- (number % 2L)
等价于
- (number % 2L != 0)
如果余数是1,则条件为true,因此立即执行紧跟if的语句。如果余数是0,则条件是false,因此执行紧跟else关键字的语句。在这里,if表达式完成的工作一目了然。但是,对于复杂的表达式,则最好再添加额外的几个字符与0比较一下,以确保代码容易理解。
在if语句中,条件可以是结果为任意基本数据类型(见第2章)的数值表达式。当条件表达式的结果是数值而不是if语句所要求的bool值时,编译器自动将表达式的结果强制转换为bool类型。强制转换为bool类型的非零值成为true,而零值成为false。
整数除以2得到的余数只能是1或0。输出相应消息之后,执行return语句来结束程序。
与该语句的if部分类似,关键字else后面也不跟分号。缩排还是用于指示不同语句之间的关系。我们可以清楚地看出哪条语句对应于true或非零结果,哪条对应于false或零结果。我们应该在程序中始终缩排语句,以表明相应的逻辑结构。
if-else组合是在两个选项中进行选择的,其一般逻辑如图3-2所示。

图3-2中的箭头指出了语句的执行顺序,这取决于if条件是返回true还是false。