fortran 95上此程序的输出显示星号而不是数字。另外,我无法按照预期的方式打印实验#;实验1,实验2,实验3等。相反,它打印如下;实验1,实验1,实验1。
有关如何解决此问题的任何想法?以下是我的整个计划。
感谢您的时间。
PROGRAM numbersgen
IMPLICIT NONE
!Variable declaration
INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
INTEGER, DIMENSION(:),ALLOCATABLE::temparray
INTEGER:: numrolls, numexps
INTEGER:: i=0, j=0
REAL:: avg=0, sdv=0, variance=0, sum=0
INTEGER:: k, min, pos, temp
.............
------
REAL, INTENT(IN):: sum
REAL, INTENT(IN):: avg, variance, sdv
PRINT*, " "
PRINT*, "Sum: ",sum
PRINT '(1X,A,F5.3)', "Average: ",avg
PRINT '(1X,A,F5.3)', "Variance: ",variance
PRINT '(1X,A,F5.3)', "Standard Deviation: ",sdv
END SUBROUTINE
END PROGRAM
答案 0 :(得分:5)
F5.3
格式要求值介于0到9.999之间。如果平均值大于或等于负值,则会发生反转。要查找合理的格式规范,请暂时将格式更改为F15.3
,以便至少可以查看值。
我不明白为什么实验编号没有增加。哦哦!子程序中使用的主程序的i
范围是什么?!它们没有本地声明,implicit none
生效,所以我倾向于认为这是一个问题。要确认的简单实验是将主程序中i
的名称更改为完全不同的名称,例如expidx
,并查看是否存在编译错误。 (有四个地方需要改变。)
答案 1 :(得分:3)
通过将子例程放在程序中的contains语句中,可以让他们访问程序中声明的数据。因此,使用i和j的子程序实际上会改变程序本身的值。不要这样做!
'正确'的方法是将子程序作为单独的程序单元或在模块中,并在主程序中使用它。