case选择器不仅可以匹配单个值,还可以匹配连续范围,或用逗号组合多个值和范围。本例使用分数区间完成等级分类。
语法结构
select case (selector)
case (lower:upper)
! selector位于闭区间lower到upper时执行
case (value_1, value_2, lower_2:upper_2)
! selector等于列表中的值或落入所列范围时执行
case default
! 没有任何case匹配时执行
end select
- lower:upper表示包含上下界的闭区间,例如80:89包含80和89。
- 一个case选择器可以用逗号列出多个单值或范围,只要其中任意一项匹配,就会执行该分支。
- 同一个select case中的取值和范围不能互相重叠,否则编译器无法确定应该选择哪个分支。
本文代码
! select case可使用范围和列表匹配多个取值。
program selectCaseRangesDemo
implicit none
integer :: score
score=85
print "(A)","select case范围与列表:"
select case (score)
case (90:100)
print "(A)","等级:优秀"
case (80:89)
print "(A)","等级:良好"
case (60:69,70:79)
print "(A)","等级:合格"
case (0:59)
print "(A)","等级:不合格"
case default
print "(A)","分数超出范围"
end select
end program selectCaseRangesDemo
编译运行
(base) hong@hongdeMacBook-Pro 031.selectCaseRanges % gfortran exampleSelectCaseRanges.f90
(base) hong@hongdeMacBook-Pro 031.selectCaseRanges % ./a.out
select case范围与列表:
等级:良好
现象分析
score的值为85。它不属于90:100,但位于闭区间80:89内,因此程序进入该分支并输出“等级:良好”。匹配成功后,其余case分支不再执行。
case (60:69,70:79)把两个范围列在同一分支中,其中任意一个范围匹配都会输出“等级:合格”。当分数不在0到100内时,所有显式范围均不匹配,程序进入case default。
核心知识点
- case (a:b)匹配从a到b的闭区间,a和b本身也属于该范围。
- 同一个case中可以用逗号组合多个单值和范围,任意一项匹配都会进入该分支。
- 各分支的值域必须互不重叠;匹配成功后只执行一个分支,未匹配值由case default处理。