program hello
integer a(9)
integer index; ! note no dimension here
a=(/1, 3, 4, 5, 6, 7, 8, 9, 10/)
index = MINLOC(a, MASK=(a > 5))
Print *, index
end program Hello
main.f95:5.3:
index = MINLOC(a,MASK =(a> 5)) 1 错误:在(1)
的赋值中,排名0和1不兼容program hello
integer a(9)
integer index(1) ! note dimension 1 here which looks redundant at first
a=(/1, 3, 4, 5, 6, 7, 8, 9, 10/)
index = MINLOC(a, MASK=(a > 5))
Print *, index
end program Hello
Here我可以找到相关的讨论,但我觉得它不足以让我理解其中的差异。
答案 0 :(得分:6)
您可以使用minloc
参数修复第一个版本,从DIM
获取标量返回值:
index = MINLOC(a, DIM=1, MASK=(a > 5))
P.S。除非每行放置多个语句,否则不需要分号来结束语句。 Fortran不是C.
答案 1 :(得分:1)
This discussion提出了一个重点:MINLOC返回一个数组,即使它只是一个数字,它仍然是一个数组。
可以将index声明为数组,如上所述,或者使用临时数组。
integer :: temp(1)
...
temp=minloc(dist)
index=temp(1)
也可以使用DIM参数来避免手动摆弄数据类型,如M.S.B的答案所述。