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

简介: learn_C_deep_7 (switch 语句的基本理解、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 语句前定义该变量,或者在加上定义时加上{},或者封装成函数

int a = 1;
    switch (day)
    {
    case 1:
        printf("%d\n", a);
        break;
case 1:
  {
    int a = 1;
    printf("%d\n", a);
  }
    break;
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;
}


image.png

总结: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修饰的变量不可以。


相关文章
|
27天前
|
C#
c#中switch case语句的用法
C#中的 `switch case`语句提供了一种简洁而高效的方式来处理多个条件分支。通过了解其基本语法、注意事项和高级用法,可以在实际开发中灵活运用 `switch case`,提高代码的可读性和维护性。希望本文能帮助你更好地理解和使用C#中的 `switch case`语句。
54 0
|
2月前
|
Java
【编程基础知识】switch case可以用string(千万注意要加上break)
本文详细探讨了Java中`switch`语句使用字符串时的注意事项,重点讲解了`break`语句的重要性。通过代码示例和流程图,帮助读者正确理解和使用`switch`语句,避免常见的编程错误。
208 4
|
Java 编译器 C语言
【C/C++】 switch-case 详解/全面总结
关于 C语言/C++ 中,switch-case 的尽量详细和全面的解释与总结
918 0
if-else if与switch的区别
if-else if与switch的区别
190 0
switch case 执行
switch case 执行
142 0
|
C#
switch case语句
switch case语句
210 0
|
Java
switch case 语句有如下规则
switch case 语句有如下规则
184 0
|
C语言
分支与循环语句(if…else , switch...case , default)
分支与循环语句(if…else , switch...case , default)
136 0
分支与循环语句(if…else , switch...case , default)

热门文章

最新文章