判断语句——if else、switch
if else 前面说过了,为了实现“什么样的情况”做“什么样的动作”,故C++非常正常地提供了条件判断语句以实现条件的不同而执行不同的代码。if else的格式为:
if(<数字>)<语句1>else<语句2> 或者 if(<数字>)<语句1> long a = 0, b = 1; P1: a++; b *= a; if( a < 10 ) goto P1; long c = b; | 上面的代码就表示只有当a的值小于10时,才跳转到P1以重复执行,最后的效果就是c的值为10的阶乘。
上面的<数字>表示可以在“if”后的括号中放一数字,即表达式,而当此数字的值非零时,即逻辑真,程序跳转以执行<语句1>,如果为零,即逻辑假,则执行<语句2>。即也可如此:if( a – 10 ) goto P1;,其表示当a – 10不为零时才执行goto P1;。这和前面的效果一样,虽然最后c仍然是10的阶乘,但意义不同,代码的可读性下降,除非出于效率的考虑,不推荐如此书写代码。
而<语句1>和<语句2>由于是语句,也就可以放任何是语句的东西,因此也可以这样:
上面可谓吃饱了撑了,在此只是为了说明<语句1>实际可以放任何是语句的东西,但由于前面已经说过,标号的定义以及注释语句和预编译语句其实都不是语句,因此下面试图当a非零时,定义标号P2和当a为零时书写注释“错误!”的意图是错误的:
if( a ) P2: 或者 if( !a ) // 错误! a++; a++; | 但编译器不会报错,因为前者实际是当a非零时,将a自增一;后者实际是当a为零时,将a自增一。还应注意,由于复合语句也是语句,因此:
if( a ){ long c = 0; c++; } | 由于使用了复合语句,因此这个判断语句并不是以“;”结尾,但它依旧是一个单句,即:
if( a ) if( a < 10 ) { long c = 0; c++; } else b *= a; | |