程序员

C语言switch你不知道的一些事情

作者:admin 2021-10-17 我要评论

文章目录 C语言switch你不知道的一些事情 C语言switch的“BUG” switch的default只能放在最后吗 switch的case中可以声明变量吗 C语言switch你不知道的一些事情 C...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

C语言switch你不知道的一些事情


C语言switch的“BUG”

先抛出一个问题,下面的code运行结果是什么?

#include<stdio.h>

int main()
{
	int a=2;
	
	switch(a)
	{
		a=3;
		case 2:
			printf("a is %d.\n",a);
			break;
			
		case 3:
			printf("a is %d.\n",a);
			break;
			
		default:
			break;
	} 
	
	return 0;
}

运行结果如下👇
在这里插入图片描述

为什么会是2呢?

因为C语言会忽视(ignore) switch语句与第一个case之间的code,也就是根本没有执行 “a=3;”这条语句

所以同学们之后一定要注意不要在switch语句与第一个case之间加任何code


switch的default只能放在最后吗?

答案不是的,其实可以放在switch的任何位置,Demo code如下👇

#include<stdio.h>

int main()
{
	int a=2;
	
	switch(a)
	{
		default:
			printf("Not matching any cases.\n");
			break;
			
		case 2:
			printf("a is %d.\n",a);
			break;
			
		case 3:
			printf("a is %d.\n",a);
			break;
	} 
	
	return 0;
}

运行结果如下👇
在这里插入图片描述


switch的case中可以声明变量吗?

可以的,但是case之后紧邻的下一条语句不能是变量声明语句,否则编译会报错,Error code如下👇

#include<stdio.h>

int main()
{
	int a=2;
	
	switch(a)
	{
		case 2:
			int b=3;
			printf("a+b is %d.\n",a+b);
			break;	
	
		case 3:
			printf("a is %d.\n",a);
			break;
			
		default:
			printf("Not matching any cases.\n",a);
			break;
	} 
	
	return 0;
}

编译报错

[Error] a label can only be part of a statement and a declaration is not a statement

正确code1如下👇

#include<stdio.h>

int main()
{
	int a=2;
	
	switch(a)
	{
		case 2:
			; //加一个‘;’表示插入一个空语句
			int b=3;
			printf("a+b is %d.\n",a+b);
			break;	
	
		case 3:
			printf("a is %d.\n",a);
			break;
			
		default:
			printf("Not matching any cases.\n",a);
			break;
	} 
	
	return 0;
}

正确code2如下👇

#include<stdio.h>

int main()
{
	int a=2;
	
	switch(a)
	{
		case 2:
		//加入一对花括号,变成一个语句块
		{
			int b=3;
			printf("a+b is %d.\n",a+b);
			break;	
		}
	
		case 3:
			printf("a is %d.\n",a);
			break;
			
		default:
			printf("Not matching any cases.\n",a);
			break;
	} 
	
	return 0;
}

C语言的“bug”隐式类型转换
C语言GOTO你不知道的一些事情


在这里插入图片描述

;原文链接:https://blog.csdn.net/qq_31985307/article/details/116107392

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • C语言switch你不知道的一些事情

    C语言switch你不知道的一些事情

  • C++---模板进阶

    C++---模板进阶

  • c语言笔记(一)——操作符和表达式

    c语言笔记(一)——操作符和表达式

  • 五大常规算法:分治法,动态规划算法,回

    五大常规算法:分治法,动态规划算法,回

腾讯云代理商
海外云服务器