首页 > 电脑常识 > 云计算

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

admin 云计算 2021-04-26 15:55:27 c语言   switch  
后台-系统设置-扩展变量-手机广告位-内容正文底部

文章目录

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

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

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://jcdi.cn/diannaochangshi/yunjisuan/634.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码