【C++ Primer 第五版】条件语句

C++提供两种按条件指向的语句,一种是if语句,根据条件决定控制流,另一种是switch语句,根据计算得到的整型表达式的值来选择执行路径

1 if 语句

if语句的作用是判断一个指定条件是否为真,根据判断结果来决定是否执行另外一条语句,if语句可以有else分支,也可以没有

if (condition)
    statement
else
    statement2

if语句的condition必须用圆括号包围
condition可以是表达式,也可以是初始化了的变量
condition中的内容必须能转化为布尔类型

  • 2 嵌套if语句
if (grade < 60) 
    lettergrade = scores[0];
else{
    lettergrade = scores[(grade - 50)/10];
    if (grade != 100)
        if (grade % 10 > 7)
            lettergrade += '+';
        else if (grade % 10 < 3)
            lettergrade += '=';
}

常见错误是忘记使用花括号来包围原本应该成块的语句
为了避免此类问题,有些编码风格要求在if或else之后必须写上花括号(对while和for也有类似要求),可以避免混乱也方便后续添加语句

  • 悬垂else

else要与离它最近的尚未匹配的if进行匹配,从而消除程序的二义性
当if分支多于else分支,常常比较麻烦

  • 使用花括号控制执行路径

2 switch语句

switch语句提供了一条便利的途径来在一些固定选项中做出选择

unsigned aCnt = 0, eCnt = 0, iCnt = 0, uCnt = 0;
char ch;
while (cin >> ch){
    switch (ch){
        case 'a':
            ++aCnt;
            break;
        case 'e':
            ++eCnt;
            break;
        case 'i':
            ++iCnt;
            break;
        case 'o':
            ++oCnt;
            break;
        case 'u':
            ++uCnt;
            break;
    }
}

switch首先对括号里表达式求值,可以是初始化变量声明,表达式值转换成整数类型,然后与case标签值进行比较,匹配成功的化就开始执行,直到switch结尾或者遇到break语句为止
一般不要省略case分支后的break语句,如果没有最好需要注释说明程序逻辑
上述例子,如果没有break,则会出现跨越case标签,执行多个递增运算

case标签后面不一定给得换行,可以将标签写在一行里

switch(ch){
    case 'a' : case 'e': case 'i': case 'o' : case 'u' :
        ++ vowelCt;
        break;
}
  • default标签
    如果没有任何case标签匹配switch表达式的值,则可以执行default标签后面的语句
switch (ch){
    case 'a' : case 'e': case 'i': case 'o' : case 'u' :
        ++ vowelCt;
        break;  
    default:
        ++othercnt
        break;
}

即使不准备在default标签下做任何工作,也可以定义空语句

  • switch内部变量的定义

switch执行流程跨过某些case标签,需要注意变量作用域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值