select case用于根据一个离散选择值进入不同分支。它适合材料编号、状态码、菜单选项等分类判断,可以让多个固定值的分支结构比连续的if更清楚。
本篇只介绍单个整数值的基础匹配。范围匹配、多个值写在同一个case中的写法留到后续文章。
语法结构
select case (selector)
case (value_1)
! selector等于value_1时执行
case (value_2)
! selector等于value_2时执行
case default
! 没有任何case匹配时执行
end select
- selector是选择表达式,程序根据它的值寻找匹配的case。
- 匹配到一个case后,只执行该分支,然后跳到end select之后,不会继续执行其他分支。
- case default是可选的兜底分支,用于处理所有未列出的值。
本文代码
! select case用于按离散值选择一个分支。
program selectCaseBasicDemo
implicit none
integer :: materialCode
materialCode = 2
write (*,"(A)") "select case基础:"
select case (materialCode)
case (1)
write (*,"(A)") "材料:铝"
case (2)
write (*,"(A)") "材料:钢"
case (3)
write (*,"(A)") "材料:铜"
case default
write (*,"(A)") "材料:未知"
end select
end program selectCaseBasicDemo
编译运行
(base) hong@hongdeMacBook-Pro 030.selectCaseBasic % gfortran -Wall -Wextra -std=f2018 exampleSelectCaseBasic.f90
(base) hong@hongdeMacBook-Pro 030.selectCaseBasic % ./a.out
select case基础:
材料:钢
现象分析
materialCode的值为2,因此选择case (2),输出“材料:钢”。匹配成功后,程序直接离开整个select case结构,不会继续执行case (3)或case default。
如果把materialCode = 2改为4,1、2、3都无法匹配,程序就会执行case default并输出“材料:未知”。
两个核心知识点
- select case用一个选择表达式在多个离散值分支中进行单路分派。
- case default处理所有没有明确列出的值,避免未知编号没有任何反馈。
与 if 的选择
当判断条件是“某个值等于若干个固定选项”时,select case通常更容易扫描;当条件包含大小比较、范围组合或多个变量之间的逻辑关系时,if通常更合适。后续的范围与列表匹配会继续扩展case的写法。