关于break和continue在含有switch分支的循环中产生的影响

先来看个例子:
#include
int main()
{
char str[] = “SSSWILA”;
char bc;
int k;
for (k = 2; (bc = str[k]) != ‘\0’; k++)
{
switch (bc)
{
case ‘I’: ++k; break;
case ‘L’: continue;
default: std::cout << bc;
continue;
}
std::cout << “8”;
}
该程序运行后输出的结果是SW8A。
那么究竟是怎么运行的呢?
首先要看字符串数组str[]=“SSSWILA”,学过数组的都知道,数组的下标是从0开始,也就是说str[]包含的元素,字符串数组以’\0’结尾,如下:
字符串数组str[]其实是包含最后一个‘\0’在内,一共有8个字符的字符串数组
上面程序中k=2开始
当k=2时,bc=str[2]=‘S’(参考上述表格),执行到switch分支结构时,前面2个条件均不符合,所以执行default那一句,也就是std::cout<<str[2],但default语句执行结束时,并没有break帮助其结束switch分支,而替代的是continue,此时的continue对switch语句其实没有影响,影响的是外围for循环,当执行到关键字continue时,外围for循环直接从continue这里跳过去k++(k=3)而执行下一次循环了,所以continue之后,第一次循环时,根据结果推导出,最后并没有执行switch分支后的std::cout<<“8”;语句。同理第二次循环,根据结果得到的结论也是没有执行std::cout<<”8“。
所以当k=2,k=3时,输出的结果时SW。

当k=4时,bc=str[4]=‘I’,到switch里,执行case ‘I’,++k;break;
此时++k,k=5,等break出了switch,但没有终止循环内的语句,所以顺序执行了后买的std::cout<<“8”,所以输出了"8",此时由于前面k=5,for循环又在执行一次k++, k=6.
(这里当k=5时,其实并没有执行for循环,因为在当k=4时,其实在switch里面已经将k的值进行一次加1,得到k=5,当输出"8"后,for循环的第三个语句又将k值加1,而进行到后面一次循环)

当k=6时,bc=str[6]=‘A’,进入swtich时,执行default那一条指令,和当k=2一样,也没有输出”8“。此时k值再加1,k=7
当k=7时,bc=str[7]=‘\0’,此时循环条件不成立,循环终止。

最后程序输出的结果SW8A。

综上分析可以得出的结论是,当循环(for、while循环)中包含switch语句块,当执行到switch中的break语句时,switch分支执行完成,顺序执行switch语句块后面的代码。当执行到switch中的continue语句时,不仅跳出了switch语句,而且还跳出了循坏,switch语句块后面的代码没有被顺序执行。

写在最后,continue如果单独放在switch语句中,则不能编译通过,想要使用必须搭配循环才能使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值