C语言之switch学习

好久没写点东西了,也是由于发现好像没有什么可写的,最近查资料时发现一个比较有意思的问题,所以想记录记录。

关于switch的用法,下面看一段小程序

#include <stdio.h>

int main(void)

{

int a = 1;

switch(a)

{

case 0:

printf("case 0\n");

break;

case 1:

printf("case 1\n");

break;

case 2:

printf("case 2\n");

break;

default:

printf("default\n");

break;

}

return (0);

}

上面这段代码相信大家都知道运行结果打印case 1

稍作修改

#include <stdio.h>

int main(void)

{

int a = 1;

switch(a)

{

case 0:

printf("case 0\n");

break;

case 1:

printf("case 1\n");

//break;

case 2:

printf("case 2\n");

break;

default:

printf("default\n");

break;

}

return (0);

}

相信知道认真学习过switch语句的人也都知道运行结果会打印case 1 case 2

再次作修改

#include <stdio.h>

int main(void)

{

int a = 1;

switch(a)

{

case 0:

printf("case 0\n");

break;

case 1:

do{

printf("case 1\n");

//break;

case 2:

printf("case 2\n");

break;

} while(0)

default:

printf("default\n");

break;

}

return (0);

}

相信到这里如果之前未遇到过类似情况的人,应该大多数就会问这个能编译过么,因为我也没遇到过,开始也不知道答案如何。运行代码后输出: case 1 case 2 default,开始也不明白这是为什么。

其实只要是确定能编译通过,语法没有问题的话,用基本C语法就能解释这是为什么,而不是啥奇怪的问题,由于case 2下面有break,由于do{}while(0)的存在,break的语法明确指出,这个break应该是跳出do{}while(0),而不是跳出switch,跳出后,继续执行switch就会打印default。

所以,其实仅仅是巧妙的运用的switch及break的语法,只是一般人们不常这么用。这些基本语法的巧妙组合一般出现在大牛们的开源软件中,所以我们要好好的向大牛们学习!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值