原文: https://beginnersbook.com/2014/01/switch-case-statements-in-c/

当我们有多个选项时,使用switch-case语句,我们需要为每个选项执行不同的任务。

C - switch-case语句

语法:

  1. switch (variable or an integer expression)
  2. {
  3. case constant:
  4. //C Statements
  5. ;
  6. case constant:
  7. //C Statements
  8. ;
  9. default:
  10. //C Statements
  11. ;
  12. }

switch-case流程图

C 编程的`switch-case`语句 - 图1

C 中的switch-case示例

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num=2;
  5. switch(num+2)
  6. {
  7. case 1:
  8. printf("Case1: Value is: %d", num);
  9. case 2:
  10. printf("Case1: Value is: %d", num);
  11. case 3:
  12. printf("Case1: Value is: %d", num);
  13. default:
  14. printf("Default: Value is: %d", num);
  15. }
  16. return 0;
  17. }

输出:

  1. Default: value is: 2

说明:switch中我给出了一个表达式,你也可以给变量。我给了num + 2,其中num值是 2,并且在相加之后表达式得到 4。因为没有用值 4 定义的情况,所以执行默认情况。

怪异故事 - 介绍break语句

在我们讨论更多关于break语句之前,请猜测这个 C 程序的输出。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i=2;
  5. switch (i)
  6. {
  7. case 1:
  8. printf("Case1 ");
  9. case 2:
  10. printf("Case2 ");
  11. case 3:
  12. printf("Case3 ");
  13. case 4:
  14. printf("Case4 ");
  15. default:
  16. printf("Default ");
  17. }
  18. return 0;
  19. }

输出:

  1. Case2 Case3 Case4 Default

我传递了一个变量给switch,变量的值是 2,所以控制跳转到case 2,但是在上面的程序中没有这样的语句可以在case 2 执行后打破流程。这就是case 2之后,所有后续case和默认语句都已执行的原因。

如何避免这种情况?

我们可以使用break语句来打破每个case块之后的控制流。

switch-case中的break语句

当您希望程序流从switch中出来时,break语句很有用。每当在switch体中遇到break语句时,控制流都会出现在switch case语句外。

具有breakswitch-case示例

和在上面看到的相同,但这次我们正在使用break

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i=2;
  5. switch (i)
  6. {
  7. case 1:
  8. printf("Case1 ");
  9. break;
  10. case 2:
  11. printf("Case2 ");
  12. break;
  13. case 3:
  14. printf("Case3 ");
  15. break;
  16. case 4:
  17. printf("Case4 ");
  18. break;
  19. default:
  20. printf("Default ");
  21. }
  22. return 0;
  23. }

输出:

  1. Case 2

为什么default后不使用break语句?

控制流本身会在默认情况下从switch中出来,所以我没有使用它,但是如果你想在默认情况下使用它,你可以使用它,这样做没有坏处。

关于switch-case的几个重点

1)case并不总是需要顺序1,2,3等。它们可以在case关键字后面包含任何整数值。此外,case不需要始终按升序排列,您可以根据程序的需要以任何顺序指定它们。

2)您也可以在switch-case中使用字符。例如:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char ch='b';
  5. switch (ch)
  6. {
  7. case 'd':
  8. printf("CaseD ");
  9. break;
  10. case 'b':
  11. printf("CaseB");
  12. break;
  13. case 'c':
  14. printf("CaseC");
  15. break;
  16. case 'z':
  17. printf("CaseZ ");
  18. break;
  19. default:
  20. printf("Default ");
  21. }
  22. return 0;
  23. }

输出:

CaseB

3)switch中提供的表达式应该产生一个常量值,否则它将无效。

例如:

switch的有效表达式:

switch(1+2+23)
switch(1*2+3%4)

无效的switch表达式:

switch(ab+cd)
switch(a+b+c)

4)允许嵌套switch语句,这意味着你可以在另一个switch内部使用switch语句。但是应该避免使用嵌套的switch语句,因为它会使程序更复杂,更不易读。