Fortran Coder

查看: 333|回复: 5

[流程控制] 为什么case语句中,没有的例子,值会很大?

[复制链接]

16

帖子

6

主题

0

精华

入门

F 币
100 元
贡献
49 点
发表于 2022-5-26 12:13:31 | 显示全部楼层 |阅读模式
本帖最后由 芥子纳须弥 于 2022-5-26 12:14 编辑

[Fortran] 纯文本查看 复制代码
program select
   INTEGER medium,isal
   real ew
   
   medium=1
   isal=0
   call DIEL_WAT(medium, isal, ew)
   write(*,*) ew
   write(*,*) isal
  
  end 
  


  subroutine DIEL_WAT(medium, isal, ew)
  INTEGER medium,isal,a,b
  real ew

  SELECT CASE (isal)
  CASE ( 1 )
    a =20
  CASE ( 2 )
    a =40
  endselect
  
    SELECT CASE (medium)
  CASE ( 0 )
    b =0
  CASE ( 1 )
   b=1
  CASE ( 2 )
   b=2
  endselect
 
  ew = a+b
  end

得到的结果是

case test.f90

476 Bytes, 下载次数: 1

939

帖子

0

主题

0

精华

大师

F 币
127 元
贡献
45 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2022-5-26 15:24:19 | 显示全部楼层
因为变量 a, b 没有初始化,其值不确定。

939

帖子

0

主题

0

精华

大师

F 币
127 元
贡献
45 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2022-5-26 15:29:17 | 显示全部楼层
如果你的 isal , medium 可能的取值是连续的。可以尝试用数组表来代替 select
[Fortran] 纯文本查看 复制代码
program select
  integer :: medium = 1 , isal = 1
  real :: ew
  call DIEL_WAT(medium, isal, ew)
  write(*,*) ew, isal
end program select

subroutine DIEL_WAT(medium, isal, ew)
  Integer , parameter :: AList(0:*) = [0,20,40]
  Integer , parameter :: BList(0:*) = [0,1,2]
  iNTEGER medium,isal
  real ew
  ew = AList(isal)+BList(medium)
end subroutine DIEL_WAT

16

帖子

6

主题

0

精华

入门

F 币
100 元
贡献
49 点
 楼主| 发表于 2022-5-26 21:16:25 | 显示全部楼层
vvt 发表于 2022-5-26 15:29
如果你的 isal , medium 可能的取值是连续的。可以尝试用数组表来代替 select
[mw_shl_code=fortran,true]p ...

感谢,解决了我的问题

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
发表于 2022-5-26 23:01:45 | 显示全部楼层
我用vs2022+oneAPI的Fortran编辑器跑mkl里的例子就是遇到过这样的情况。没有转置时,索引的值是0,一转置就变成了几千万。最后发现就是没有初始化,没给赋初值的原因。

16

帖子

6

主题

0

精华

入门

F 币
100 元
贡献
49 点
 楼主| 发表于 2022-7-18 22:25:11 | 显示全部楼层
zjk0112 发表于 2022-5-26 23:01
我用vs2022+oneAPI的Fortran编辑器跑mkl里的例子就是遇到过这样的情况。没有转置时,索引的值是0,一转置就 ...

是的,没错
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2022-12-9 03:26

Powered by Tencent X3.4

© 2013-2022 Tencent

快速回复 返回顶部 返回列表