你好, 欢迎｡ 在这节课中, 我想讲一讲switch语句｡
它是if语句的替代语句, 但通常只在特定情况下使用｡
但是它有一些很酷的语法, 可以在if语句中进行一些重复｡
因此,
条件运算符和if than else语句使得编写在两个选项之间进行选择的程序变得很容易｡
问问题和做决定都很容易｡
但是,
很多时候, 程序需要从几个备选项中选择一个｡
这实际上就是如果, 如果,
如果, 如果, 如果, 如果, 如果, 如果, 如果.
这很混乱, 因为当你有几个选择时, 你显然可以用if语句来实现它, 但你可能有一百个else
if｡ 所以它很乏味, 容易出错,
而且真的很麻烦｡ 这就像写一堆样板代码｡
所以这个语法的另一种选择以及在switch中可以做的所有事情都可以在if中做｡
但它更干净, 更容易, 实际上也更有效率｡
因此, 当成功地将变量的值与不同的值进行比较时, 请使用switch语句｡
这意味着如果你有一个if语句, 然后你有一个else if, else if, else if, else if, else
if, else if, 使用switch语句｡
如果这些布尔表达式稍微复杂一点｡
不能使用switch语句｡
只有在与某个值（如常量）进行比较时, 才能使用switch语句｡
表达式不可能那么复杂｡
但是使用switch语句要方便得多, 效率也高得多, 而且大多数语言都有这种结构｡
而且看起来很不错｡
你会注意到很多语言都是基于c的｡
如果你以前编程过, 你会看到并熟悉很多这样的结构, 因为它们最初出现在c或be中,
之前的语言｡
下面是switch语句的语法｡ 您有switch关键字｡
在开关里面, 你有左右括号, 这就是表达式｡
所以它看起来就像开头的if语句, 除了关键字不是if, 而是switch.
然后您就有了左括号｡
左括号是必需的｡ 左括号是开关主体的起始部分｡
您可以看到最底部的右括号, 它结束了开关的主体｡
另一件重要的事情是这些关键词的情况｡
Case实际上就像if语句本身｡
所以switch实际上是在看一个表达式, 而不是看它是真还是假｡
开关可能只是查看变量或其他内容｡
然后在case语句中计算变量.
如果值1等于表达式, 如果值n等于表达式｡
但是你可以把它看作是一个开关在顶层, 然后每个case都是一个if语句, 把值和开关中的表达式进行比较｡
所以病例也是关键词｡ 您还注意到大小写后面的冒号｡
所以你有了案例, 你就有了价值｡
然后在里面, 你可以有多个程序语句｡
最后, 你有一个break关键字｡ 这是另一个关键词｡
这里有三个关键词, 实际上是四个｡ 下面是switch关键字､ case关键字､
break关键字和default关键字｡
这些都是需要注意的重要事项｡
我们将通过一个详细的例子, 但你可以有不同的情况｡ 同样, 这只是一个if, if, if, if｡
因此, 如果值1是等于表达式, 则执行代码｡
否则, 如果值2等于表达式,
则计算该表达式 否则, 如果值3等于表达式, 则计算该表达式｡
否则, 如果值n等于expression, 则执行该块内的代码｡
大小写块从冒号开始到换行符结束｡
如果你在那里没有突破, 它就会从其他案件中消失｡
我们会再谈一次的｡
最后一个重要的是这个默认关键字｡ 这基本上是else, else
if, else if, else if, 然后是else在底部｡
所以如果没有其他case的计算结果为表达式, 则会设置此值｡
让我们来谈谈我提到的一些细节｡
括号内的表达式将成功地与值进行比较｡
如果我们回到语法, expression和所有的值进行比较.
如果它等于任何一个值, 则执行该值内的代码｡
事例必须是简单常量或常量表达式（计算结果为常量的表达式）｡
所以你可以把x加y转换为5,
因为如果x是5, 那么它就转换为10, 然后把值和10进行比较.
但通常情况下, 你会打开一个变量, 它等于某个数字｡
如果找到一个case, 其值等于表达式的值,
则执行该case后面的语句｡
如果包含多个语句, 则不必用大括号将它们括起来｡
这就是说, 当包含多个语句时, case语句不需要大括号｡
记住, 对于if语句, 我们总是要有那些大括号,
事实并非如此｡ 你可以把它们一行接一行地放进去, 关键是那里的断点｡
break语句发出特定case结束的信号,
并导致语句的执行终止, 它跳出来｡
如果你在那里没有突破, 下一个案子它就会告吹｡
因此, 您希望在每个case的末尾都包含break语句｡ 当你不包括休息,
这通常意味着有一个错误或东西｡
您要包含中断的唯一原因是, 如果您有多个条件要执行程式码｡
所以如果你有多个格, 基本上就是说如果表达式是这个格, 这个格或者那个格, 那么做同样的事情,
然后你会去掉断点｡
因此,
请小心使用中断, 因为无论下一个case中是否执行某些块, 中断都可能导致问题｡
如果运算式的值不符合任何案例, 则会执行称为default的特殊选择性案例｡
这和失败是一样的, 如果没有一个案例是真的, 它就会发生｡
这是一个很好的例子, 我们创建了一个开关来计算枚举｡
在本例中, 我们有一个名为weekday的枚举类型,
它只由所有工作日指定｡
然后我们创建了一个enum weekday类型的变量, 并将其设置为Monday, 然后我们在今天打开｡
根据today的值, 变量,
其中一个case语句将被执行｡
如果今天等于星期日, 它会打印出今天是星期日,
然后跳出｡
如果今天等于星期一, 它会打印出今天是星期一并跳出｡
如果它不等于其中任何一个, 它将转到默认情况｡
因此, 让我们在代码块中运行此示例｡
下面是我们的示例代码｡ 您将看到,
因为今天等于星期一, 所以将对星期一的用例进行评估, 您将看到今天是星期一的输出｡
让我们继续构建并运行这段代码｡ 这就是我们将要看到的, 今天是星期一｡
因为今天是星期一｡
你把这个表达式放在你今天要计算的变量上, 然后计算它｡
这里要记住的关键点是, 第16行的switch语句用一个方括号开始, 第29行的switch名称用一个方括号结束｡
每个case语句中可以有多行, 而不使用方括号｡
现在, 让我们看看如果在星期一之后删除break语句会发生什么｡
因为记住, break会直接跳出箱子｡
但是如果我们删除它,
将会发生的事情是它将落到星期二, 你将看到两个printfs在今天星期一执行,
今天是星期二｡
所以现在当我们运行程序时,
我们看到今天是星期一, 今天是星期二｡
这就是break语句的重要性｡
会跳出中断｡
因此, 如果您希望星期一和星期二的输出相同, 这可能会很有用｡
比如说,
有时候你会看到这样的case语句, case Tuesday,
因为你想要相同的输出, 变量等于什么并不重要.
你可能会看到类似的情况, 但是当你有不同的case语句, 它们有不同的执行方式时,
你必须在那里添加断点｡
所以我们只看周日周一周二｡
如果我们将today值设置为Sunday, 会发生什么情况,
因为没有与之匹配的事例｡
接下来会发生的是, 它会通过默认值, 然后打印出来.
我们再来一次｡
而我们今天看到的是星期天｡
对不起, 将其设置为错误的变量｡ 我想把它设置为, 就说,
星期三吧｡ 我们周日有个案子｡
现在我们可以看到它实际上打印出了什么因为它不匹配任何一个案例｡
所以你要做的就是记住switch的语法｡
这个表达式放在括号里, 这就是你要计算的值.
大小写必须与表达式匹配｡ 所以通常,
你要做的是变量, 这就是为什么它必须是常量或者表达式, 求值为一个特定的常量值｡
然后, 您可以为每个事件设置case, 然后默认设置所有case, 不要忘记中断｡
让我们回过头来, 再多讲一点, 另一个例子,
用case构造switch.
在下一个示例中, 情况稍有不同｡
我们在这里做的是从用户那里获取数据, 然后打开它｡
在这个例子中, 在我们的主函数中,
它首先创建了一对浮点数, 然后创建了一个字符运算符, 然后要求用户输入一个值,
一个运算符和一个值2｡
它使用格式说明符来区分, 它们都有一个地址｡
根据您为运算符输入的字符（加号､ 减号或星星）, 这就是您希望在switch
case中包含的内容｡
如果用户输入了一个加号,
你可以在下一列看到, switch结构, 它是switching on运算符｡
它会把运算符的值, 变量运算符的值, 和每一个case语句进行比较.
你会注意到, 这些case语句用单引号括起来, 因为我们在比较字符｡
因此,
您可以比较数字, 变量与特定常量值, 或字符与特定常量值
然后在每个case语句中, 我们打印出一个特定的格式｡
一加二, 一减二｡
我们实际上是在打印中进行计算｡
然后你会看到那些重要的break语句,
它们会跳出来, 如果你不想陷入其他任何情况, 它们是必要的｡
你还注意到, 在最后一个case语句中, 它有一个正斜杠, 一个分隔符,
我们有一个if语句｡
我们没有在case前后加上括号,
因为在没有括号的情况下, 每个case中可以有多个语句｡
最后一种情况我们说如果值2等于0, 我们要做一个小的检查来确保我们没有被0除｡
如果我们不除以0, 那么我们就要进行除法运算｡
然后在这个案子的最后, 我们又有了一个突破｡
我们的默认情况是说您输入了一个我们不知道如何处理的运算符｡
但是switch语句是非常高效的｡
当你比较一个特定变量的多个不同的值,
然后你想做不同的事情时, 写它是非常快的｡
最后我想提到的是与决策有关的go to语句｡
这不是一个直接的决策语句, 它更多的是跳转到另一行代码, 使用一个标签, 但是它在c中是可用的,
这就是为什么我想提到它｡
go to语句有两个部分, 标签和go to关键字｡
对于那些以前用Fortran或其他一些基本语言编程的人来说, 你们可能会认识到这一点, 并且可能经常使用它｡
现在到了c, 其实没有必要用它｡
在一些情况下, 我认为它非常有用, 我稍后会解释, 但go
to是跳到某个代码, 你可以跳到任何一行代码.
人们不喜欢使用它的原因之一是因为它很难遵循｡
当你在维护一个程序的时候, 如果它是连续的, 你要一行一行的,
在while循环中执行if语句.
当你在while循环中使用if语句时, 情况已经够糟糕的了｡
但是现在如果你在源代码的第27行, 你会跳到第800行,
除了关键字, 没有别的原因, 突然你跳过了大量的代码,
这是很难维护和遵循的｡
因此要转到的两个部分和标签名称｡
标签的命名与变量的命名规则相同, 字母数字字符, 不能以数字开头,
可以以下划线开头.
您可以用下划线开头｡
基本上, 你只需要使用关键字, 然后你就可以找到某个标识符, 第二部分｡
第二部分是某个地方的标签｡
所以为了跳到那一行代码, 你必须给那一行代码加上标签.
必须有一份声明说第二部分｡
现在, 我将向您展示一个示例, 但您确实不应该使用它,
因为维护会带来相关问题｡
不过, 如果你以前编程过, 并且习惯使用它, 我想提一下｡
在c语言中, 你并不需要经常使用它｡
我看到的一个用例可能会有用｡
前几天我和一个程序员同事一起工作, 他有一堆嵌套的循环或嵌套的if语句｡
但循环可能是更好的例子｡ 循环, 记住, 重复代码｡ 他有很多嵌套循环｡
在最内层的嵌套循环中,
比如第五个, 他想跳出所有的循环, 因为他有条件｡
所以他过去常常去跳出那些循环｡
跳出循环的另一种方法是使用brake关键字,
但是brake只会跳出最里面的循环.
所以如果不设置一堆标志和一堆if语句来退出每一个循环,
就没有有效的方法了, 所以他经常去｡
这是一个我认为非常有用的例子, 因为它减少了你必须编写的代码量, 而且它对正在发生的事情非常清楚｡
你只是跳出了所有的嵌套循环, 因为你满足了一定的条件｡
这只是一个例子｡ 但在大多数情况下, 你并不真的需要去,
因为我提到的原因, 这是非常有问题的, 当你在到处跳的时候, 很难遵循代码｡
但是go to就像你在其他语言中使用它一样｡
标签名称中有一个go to关键字｡
在你的代码中, 你会跳到带有标签的那一行｡
所以你可以跳过各种代码｡
在这个例子中, 我们有一个名为top的标签, 它有一个冒号｡
所以你才知道这是个标签｡
上面有一些声明｡
在最下面, 你有一个if语句｡ 如果char等于y, 就去顶部.
所以, 你可以看到你如何在代码中到处跳转, 这使得它很难理解｡
所以基本上不要使用它, 除非你有很多很多嵌套的循环, 你想跳出所有的循环｡
-谢谢—谢谢