Fortran Coder

标题: 数据块子程序赋初值问题 [打印本页]

作者: pass74    时间: 2014-4-10 15:54
标题: 数据块子程序赋初值问题
本帖最后由 pass74 于 2014-4-10 15:57 编辑

在主程序中有 COMMON/KIO/ KR, KS, KW, KEND, IH, HIN( 200), KOUT   其中HIN定义为字符类型,其他都用隐含I-N规则定义,在数据块子程序中对以上变量赋初值如下:
BLOCK DATA
COMMON/KIO/ KR, KS, KW, KEND, IH, HIN( 200), KOUT
DATA KR/ 5/, KS/ 2/, KW/ 6/, KOUT/ 1/   
END
并没有对数组字符数组HIN( 200)赋初值


问题:
程序运行后变量KOUT 的值为0,即赋初值没有成功,请问问题出在哪里?(尝试在公共块去掉字符数组HIN( 200)就能赋初值成功)



作者: 楚香饭    时间: 2014-4-10 17:16
1.强烈建议放弃 common
2.强烈建议用 Implicit None
3.您是否没有在子程序中定义 Hin ?

如下代码在我的编译器上没有问题。输出也正确。
[Fortran] 纯文本查看 复制代码
program www_fcode_cn
  COMMON/KIO/ KR, KS, KW, KEND, IH, HIN( 200), KOUT
  character(len=5) Hin
  call sub()
  write(*,*) KOUT
end program www_fcode_cn

subroutine sub()
  COMMON/KIO/ KR, KS, KW, KEND, IH, HIN( 200), KOUT
  character(len=5) Hin !// 这句你是不是丢了?
  DATA KR/ 5/, KS/ 2/, KW/ 6/, KOUT/ 12/
  write(*,*) 'subOK'
end subroutine sub

作者: pass74    时间: 2014-4-10 18:24
chuxf 发表于 2014-4-10 17:16
1.强烈建议放弃 common
2.强烈建议用 Implicit None
3.您是否没有在子程序中定义 Hin ?

谢谢,问题已经解决,是在数据块子程序中没有定义HIN,至于放弃common以及建议用 Implicit None,因为我在修改源程序,源程序中太多这种语句,所以只好默认了





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2