program factorial
implicit none
integer:: n1
real:: fact = 1.0
integer:: n = n1
integer, dimension(1:n):: x
integer:: i
print *, "Enter a number:"
read *, n1
x(1) = n1
do i=1,n1-1
x(i+1) = n1-i
fact = fact*x(i)
end do
print *, fact
end program factorial
我编写了一个计算数字阶乘的代码。我要求用户输入一个整数'n1',然后它将创建一个包含n1个隔离专区的数组变量。我没有成功编译这个。我一直收到以下错误!
factorial.F95(6):错误542 - N出现在变量的维度中,但不是伪参数,通过USE或CONTAINS关联可用的变量,COMMON变量,PARAMETER或PURE FUNCTION <登记/> 编译失败。
我该如何解决这个问题?我希望数组维度等于输入数字。例如,假设我要计算5! (5阶乘),我希望x数组的元素长度为5(行或列)。不知怎的,我无法做到!
答案 0 :(得分:1)
常量n1
需要是一个编译时常量才能用作静态数组维度
program factorial
implicit none
integer, parameter:: n1
integer, dimension(1:n1):: x
或者你需要使用可分配的数组。
答案 1 :(得分:0)
正如Vladimir建议的那样,你必须分配数组:
integer, dimension(:), allocatable :: x
integer :: alloc_stat
print *, "Enter a number:"
read *, n1
ALLOCATE( x(1:n1), STAT=alloc_stat )
IF ( alloc_stat .ne. 0 ) THEN
WRITE(ERROR_UNIT,*) "Array allocation failed."
ERROR_STOP alloc_stat
ENDIF
(我总是检查我的ALLOCATE陈述的状态。不管你是否偏执,不管你是否偏执足够。)< / p>