learn_C_deep_7 (switch 语句的基本理解、case 的作用、break的作用switch、case 推荐规则)

目录

switch 语句的基本理解

case语句的深度理解

case 的作用

case语句的要求

break 的作用

switch case 推荐规则

规则一:

规则二:

小结:


switch 语句的基本理解

        switch是一种控制语句,用于控制程序流程的走向。在 switch 语句中,可以根据表达式的值执行特定的代码块。switch 语句包含一个表达式和多个 case 块。首先会计算表达式的值,然后在 case 块中匹配相应的值。如果匹配成功,则执行该 case 块中的代码,然后跳出 switch 语句。如果所有的 case 块均未匹配成功,则执行默认的代码块。

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

接下来我们来看一段代码

//#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	int day = 0;
	scanf("%d", &day);
	//if语句具备两个功能
	//1.判断
	//2.分支
	//switch-case-break也具备这个功能
	//但是switc不具备判断和分支的能力,它仅仅做的是拿day的值去进行匹配
	switch (day)
	{
	case 1://1.判断
		printf("星期一!\n");
		break;//2.分支
	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;
	}
	return 0;
}

        这是一个用 C 语言编写的程序。首先,程序使用 `#define` 预处理指令定义了一个宏 `_CRT_SECURE_NO_WARNINGS`,以消除安全问题的警告(scanf)。`#include` 指令包含了 `stdio.h` 头文件,提供了标准输入/输出函数的声明。接着,程序使用 `#pragma` 指令来禁用特定的警告,这里的 `#pragma warning(disable:4996)` 指令是不对 Visual Studio 中的特定警告输出进行编译器检查和编译输出的。

        在 `main` 函数中,程序定义了一个整型变量 `day`,并调用 `scanf` 函数读入一个整数,保存到 `day` 中。程序接着使用 `switch` 语句来根据 `day` 的值输出相应的信息。如果 `day` 的值符合任何一个 `case`,则输出特定的字符串,然后使用 `break` 语句跳出 `switch` 语句的执行。如果 `day` 的值都不符合任何一个 `case`,则不会输出任何信息。最后,`main` 函数返回 0 表示程序正常结束。

        总的来说,该程序演示了使用 `switch` 语句实现多分支选择的功能,优化了使用多个 `if...else` 语句的代码可读性和可维护性。

case语句的深度理解

case 的作用

        在C语言中,`case`是一种用于`switch`语句中的一个关键字。`switch`语句可以根据表达式的值来选择执行哪个`case`分支中的语句块。

case本质本质是进行判定功能。

case语句的要求

switch(m) && case n
//其中m 和 n必须是什么类型变量或者表达式?

//case 语句后的值要求是一个常量表达式或者枚举类型或者宏定义

                        ,即在编译时即可计算出结果的表达式。
//case 语句后面是否可以是const修饰的只读变量呢?不行
#include <stdio.h>
#include <windows.h>
int main()
{
    const int a = 10;
    switch (a) {//可以 - a是常量
    case a: //不行 - error C2051: case 表达式不是常量
        printf("hello\n");
        break;
    default:
        break;
    }
    system("pause");
    return 0;
}

下面这段代码有没有错误呢?

case 1:
        int a = 1;
        print("%d\n",a);
        break;

       

        在 C 语言中,case 语句中不能定义新的变量。这是因为在 C 语言中,switch-case 语句的语法规定,case 分支中只能包含语句,不能包含声明语句。

如果需要在 case 分支中使用变量,我们可以应该在 switch 语句前定义该变量,或者在加上定义时加上{},或者封装成函数

1.

int a = 1;
    switch (day)
    {
    case 1:
        printf("%d\n", a);
        break;

2.

case 1:
	{
		int a = 1;
		printf("%d\n", a);
	}
		break;

3.

void test()
{
	int a = 1;
	printf("%d\n", a);
}
	

    case 1:
		test();
		break;

break 的作用

        在`switch`语句中,`break`用于结束当前分支,跳出整个`switch`语句。

break本质其实是进行分支功能。

如果我们switch语句中没有break会怎么样呢?

        这是一段使用了 switch-case 语句的 C 语言代码,功能是根据输入的数字 day(表示星期几)输出相应的星期几的字符串。 先通过 scanf 函数读入 day 的值,然后使用 switch-case 语句进行判断。在 switch 语句中,针对每个可能的 day 值,都有一个对应的 case 分支,分别输出对应的字符串。 需要注意的是,在 case 分支中没有使用 break 语句,这意味着在匹配到某个 case 分支后,会一直往下执行直到遇到下一个 break 或者 switch 语句结束。因此,如果输入的 day 为 5,输出的不仅是“星期五!”还包括后面的“星期六!”“星期天!”,然后 switch 语句才结束。

总结:每个`case`分支的最后一条语句必须是`break`语句,否则程序将继续执行下一个分支的代码,直到遇到`break`语句或`switch`语句结束为止。

switch case 推荐规则

规则一:

如果我们想周一到周五打印“工作日”,周六到周日打印“休息日”该怎么做呢?

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	int day = 0;
	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;
	}
	return 0;
}

上面的这种写法虽然可行,但是重复的语句比较多,此时我们可以换一种写法。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	int day = 0;
	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;
	}
	return 0;
}

总结:如果多个不同case匹配,想执行同一个语句,我们就可以省区前面的case语句,只保留最后一个case语句。

规则二:

        在上面的程序当中,如果我们输入1-7以外的任何数,程序都没有运行结果,那么当用户使用该代码的时候,其代码的体验感是非常不足的,因为你输入1-7以外的任何数,程序没有报错,用户也不清楚要输入什么,以及提示什么错误。所以我们要改进一下上面的代码。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	int day = 0;
	printf("Please enter your day:>");
	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;
	default:
		printf("你输入的值有误!\n");
	}
	return 0;
}

 总结:default 是一个关键字,用于 switch-case 语句结构中的 "缺省(默认)" 分支。default 分支表示当所有的 case 分支都不匹配时,执行的代码。需要注意的是,default 分支可以放在 switch 语句的任何位置。但通常情况下,建议将 default 分支放到 switch 语句的最后面,以便于更好地理解代码的逻辑。

小结:

1.switch语句中,case完成判断功能,break完成分支功能,default完成处理异常情况。

2.case  表达式:

        语句;

        2.1.如果表达式和语句是一对多的关系(case有多条语句),此时不能再case中定义                    变量,如果需要,使用函数或{}或在switch外定义该变量。

        2.2.如果表达式和语句是多对一的关系,此时建议在执行相同语句的case后省区break                  语句,只需最后一个保留即可。

3.default可以出现在switch内的任何地方,建议放在末尾。

4.case :表达式必须在编译的时候就能转化为值,可以是宏,但是const修饰的变量不可以。

猜你喜欢

转载自blog.csdn.net/qq_64446981/article/details/130374564