switch case语法

switch case语法基本语法结构不要拿青龙偃月刀去削苹果既然已经有了分支语句,那为什么还要语句呢?语句也是一种分支语句,常常用于多分支的情况。这种多分支,一般指的是很多很多分支,而且判定条件主要以整型为主:如:输入数字,输出相应的星期几以上的程序,如果用来写,会非常的繁琐!决定了从哪开始执行语句,所以说是判定功能具体效果看上面图片那如果没有会发生什么呢?我们删除了的,看效果可以看到,当我们输入的时候,开始执行,然后竟然也执行了,后续也执行,直到星期五结束后,没再执行。当我们输入的时候,从开始执行,直到星期五结束。可以发

switch case组合

基本语法结构

switch(整型常量/整型变量/整型表达式){ 
   
    case var1:
        break;
    case var2:
        break;
    case var2:
        break;
    default:
        break;
}

不要拿青龙偃月刀去削苹果

既然已经有了if else分支语句,那为什么还要switch 语句呢?

switch 语句也是一种分支语句,常常用于多分支的情况。这种多分支,一般指的是很多很多分支,而且判定条件主要以整型为主:

如:输入数字,输出相应的星期几

#include <stdio.h>
int main()
{ 
   
	int day = 0;
	do
	{ 
   
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) { 
   
		case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期七\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
	} while (day);
	return 0;
}

以上的程序,如果用if else来写,会非常的繁琐!

case的作用是什么?

case本质是进行判定功能,与switch里面的语句相比较,如果相同,则执行语句,不相同则找下一个case比较,直至所有case语句都不与switch相同,此时执行default语句。

image-20220603215700927

case决定了从哪开始执行语句,所以说case是判定功能

break的作用是什么?

break本质是执行分支功能

具体效果看上面图片

那如果没有break会发生什么呢?

#include <stdio.h>
int main()
{ 
   
	int day = 0;
	do
	{ 
   
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) { 
   
		case 1:
			printf("星期一\n");
		case 2:
			printf("星期二\n");
		case 3:
			printf("星期三\n");
		case 4:
			printf("星期四\n");
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期七\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (day);
	return 0;
}

我们删除了1-4break,看效果

image-20220603220227329

可以看到,当我们输入1的时候,case 1开始执行,然后case 2竟然也执行了,后续也执行,直到星期五结束后,没再执行。

当我们输入2的时候,从case 2开始执行,直到星期五结束。

可以发现,1-4没有break,而5break,所以输出星期五执行,再执行break,就不再执行下面的语句了。

这恰恰说明了上面case的作用:决定了从哪开始执行语句。

但是现在的重点是break,可以发现当没有break时,会继续执行下一条case语句,当遇到break时,不再执行。

这恰恰就是break的分支功能。

其实switch语句是没有任何功能的,真正使得switch结构实现类似if else功能的是由于casebreak语句的配合。

上面的程序还可以改造成如下:

//这就是多个不同的case,想执行同一条语句的做法
#include <stdio.h>
int main()
{ 
   
	int day = 0;
	do
	{ 
   
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) { 
   
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("周内\n");
			break;
		case 6:
		case 7:
			printf("周末\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (day);
	return 0;
}

image-20220603221102287

关于break还有一个很容易混淆的地方,就是一般人在一般情况下在case后面要么不写break,要么只写break,万不得已不要写其它,特别是return,极易有可能使得用户在调试时忽略,从而不能发现问题所在!!!

case后面的值有什么要求吗?

switch语句必须是整型常量/整型变量/整型表达式

不能够是有效的布尔值,

int x = 10;
switch (0 == x)//因为这样得表达式,结果只有0/1,下面的case也只能是0/1才能够与之匹配
{ 
   
default:
	break;
}

case语句必须是整型常量/整型常量表达式,类似const修饰的常量称为只读变量也不可以!

image-20220603222100891

case语句的排列顺序问题

按字母或数字顺序排列各条case语句

就像上面的程序,当所有case语句作用相当,没有什么特别的重要性差别时,一般按顺序排列case语句,像1、2、3、4或者A、B、C、D等等。

把正常情况放在前面,而把异常情况放在后面

也如同上面的程序,我们把正常的星期一到星期七写在前面,而把退出写在最后。

按执行频率排列case语句

将使用频率高的case语句放在前面,就如同把畅销货放在售卖最显眼的地方一样。这样可以使得我们在调试(一般是频率较高的)时,能快速的找到该case语句。

default语句相关问题

先说一句,default语句可写可不写,但是,强烈建议无论如何都写上。这就谈到default语句的作用了。

作用:当所有的case语句都不与switch语句匹配时,这时执行default语句。强烈建议写在最后!!!

default语句的位置是非常自由的

image-20220603224310309

但是有一点,当case入口已开启,且没有break,且default紧随其后,也是会执行default语句的

image-20220603224514923

但是还要再说一遍:强烈建议无论如何都加上default语句,并且写在最后!!!

使用case语句的一些注意事项

简化每种情况对应的操作

也就是说,在case语句和break语句中间的语句,越简洁越好,

#include <stdio.h>
int main()
{ 
   
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{ 
   
	case 1:
		printf("hello world!\n");
		printf("hello world!\n");
		printf("hello world!\n");
		printf("hello world!\n");
		break;
	case 2:
		break;
	case 3:
		break;
	default:
		break;
	}
	return 0;
}

假设case中有四条语句,尽量将这些语句封装成一个函数,使得case中的语句尽量简洁

#include <stdio.h>
void show() { 
   
	printf("hello world!\n");
	printf("hello world!\n");
	printf("hello world!\n");
	printf("hello world!\n");
}
int main()
{ 
   
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{ 
   
	case 1:
		show();
		break;
	case 2:
		break;
	case 3:
		break;
	default:
		break;
	}
	return 0;
}

还有一点,在case后定义变量是不可以的,如果非要定义变量,那么就得加{}

image-20220604082852335

当然了,即使是这样的写法,也是非常不建议的,强烈建议封装成函数!!!
不要为了使用case语句而刻意制造一个变量

#include <stdio.h>
int main()
{ 
   
	for (int i = 0; i < 10; i++) { 
   
		int tmp = i;//这里的tmp就是刻意制造的变量,非常不建议这样干
		switch (tmp)
		{ 
   
		default:
			break;
		}
	}
	return 0;
}

应该是这样

#include <stdio.h>
int main()
{ 
   
	for (int i = 0; i < 10; i++) { 
   
		switch (i)//这样会比上面好很多
		{ 
   
		default:
			break;
		}
	}
	return 0;
}

default子句只用于检查真正的默认情况

有时候,只剩下最后一种情况需要处理,但是你却偷懒,没有用case处理这种情况,而是交给了default,这样是非常不妥的,比如说,上面那个星期一到星期七的程序,我们只用case处理了星期一至六,而把星期七交给了default是非常不好的。因为这样将失去case语句的标号所提供的自说明功能,而且丧失了使用default子句处理错误情况的能力。所以我们不能够偷懒去少写代码,而应该真正用case处理每一种情况,而将真正的默认情况交给defualt比如说输入错误。

今天的文章switch case语法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8287.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注