错误542 - N出现在变量的维度中

时间:2017-06-05 04:10:14

标签: arrays fortran

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(行或列)。不知怎的,我无法做到!

2 个答案:

答案 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>