下面有一个简单的Fortran代码,我从文本文件中读取一个矩阵,然后将其传递给子程序。但是当它在子例程中被读取时,它会给出一个垃圾值。我似乎无法弄清楚代码的错误是什么?
program main
implicit none
real, dimension(:,:), allocatable :: mat
open (unit=99, file='inp.txt', status='old', action='read')
allocate(mat(2,2))
read(99, *), mat
CALL fun(mat)
end
subroutine fun(mat)
dimension mat(2,2)
write(*,*) mat
return
end
矩阵mat
作为[2 4; 2 10]
读入,但在子程序中显示时,它会显示[1073741824 1082130432; 1073741824 1092616192]
。
答案 0 :(得分:2)
如果在Fortran中使用隐式变量声明,变量以I
,J
,K
,L
,M
或{{1}开头}表示整数(默认情况下)。
由于在主程序范围内只有N
但子例程不在,implicit none
数组real
在子例程中被解释为整数。因此垃圾。
在子例程中简单地将mat
声明为mat
可以解决您的问题。