条件语句块
语法
Select Case expression
[ Case expressionlist ]
[statements ]
[ Case Else ]
[statements ]
End Select
or
Select Case As Const integer_expression
[ Case constant | enumeration ]
[ statements ]
[ Case Else ]
[ statements ]
End Select
说明
Select Case根据表达式的值执行特定的代码。表达式被评估一次,并且按照每个
Case进行比较,直到找到匹配的表达式。匹配的Case分支中的代码被执行,程序跳到
Select Case块的末尾。
Case Else匹配任何未匹配的情况,因此如果存在
Case Else,则至少有一个
Case被执行。如果没有
Case匹配,则将跳过整个
Select Case块。
End Select用于关闭
Select Case...End Select块。
C用户注意事项:在FreeBASIC中,
Select Case的作用类似于
switch块,所有案例的结尾都有
break.由于没有直通,单个
Case中的多个选项必须放在表达式列表中。
除了整数类型之外,第一种语法也支持浮点数和字符串表达式。
表达式列表的语法:
{ expression | expression To expression | Is relational operator expression }[, ...]
- expr :评估expr ,并比较与原始表达式的相等性。如果它们相等,则会发现一场比赛。这可以被认为是“Is = expr ??”(见下文)的缩写。
- expr1 To expr2 :评估expr1 ,并检查它是否小于或等于原始表达式。如果是这样,它将评估expr2 ,并检查它是否大于或等于原始表达式。如果是这样,那么找到匹配。
- Is relational_operator expr :评估expr ,并使用提供的relational_operator (=,>,<,<>,<=,>=)对原始操作进行比较。如果比较是真的,那么找到匹配。
可以在每个
Case中进行多次检查,通过逗号分隔(
,)。一旦找到匹配项,程序完成检查,并继续执行
Case块的代码语句。没有进一步的表达式被评估或检查。
表达式列表示例:
情况1 | 不变 |
情况5.4至10.1 | 范围 |
案例为>3 | 大于小于 |
案例1,3,5,7至9 | 匹配一组值 |
案例x | 一个变量的值 |
如果使用
As Const,则只能计算整数常量(不包括两个浮点常量的所有数字常量:单和双),并且表达式列表仅支持简单常量和枚举。“
To”范围受支持,但“
Is”关系运算符不是。
使用
As Const,将创建一个跳转表,以包含处理的整数
Case的整个范围。这允许
Select Case As Const比
Select Case快。然而,值范围的大小受到限制,范围内的最大值可能不高于最小值+ 4096。
例子
Dim choice As Integer
Input "选择1到10之间的数字:"; choice
Select Case As Const choice
Case 1
Print "数字是1"
Case 2
Print "数字是2"
Case 3, 4
Print "数字是3或4"
Case 5 To 10
Print "数字在5到10的范围内"
Case Else
Print "数字在1-10范围之外"
End Select
''选择CASE vs.选择CASE作为CONST速度测试
Const N = 50000000
Dim As Integer dummy = 0
Dim As Double t = Timer()
For i As Integer = 1 To N
Select Case i
Case 1, 3, 5, 7, 9
dummy += 1
Case 2, 4, 6, 8, 10
dummy += 1
Case 11 To 20
dummy += 1
Case 21 To 30
dummy += 1
Case 31
dummy += 1
Case 32
dummy += 1
Case 33
dummy += 1
Case Is >= 34
dummy += 1
Case Else
Print "不能发生"
End Select
Next
Print Using "SELECT CASE:##。###秒"; Timer() - t
t = Timer()
For i As Integer = 1 To N
Select Case As Const i
Case 1, 3, 5, 7, 9
dummy += 1
Case 2, 4, 6, 8, 10
dummy += 1
Case 11 To 20
dummy += 1
Case 21 To 30
dummy += 1
Case 31
dummy += 1
Case 32
dummy += 1
Case 33
dummy += 1
Case Else
If( i >= 34 ) Then
dummy += 1
Else
Print "不能发生"
End If
End Select
Next
Print Using "SELECT CASE AS CONST:##。### seconds"; Timer() - t
Sleep
与QB差别
- QB中不存在选择Case作为Const
- 在“expr1 TO expr2 ”案例中,即使expr1 高于原始表达式,QB总是会对两个表达式进行评估。
参考