If statement 由'else if'语句引起的(1)处的不可分类语句

If statement 由'else if'语句引起的(1)处的不可分类语句,if-statement,fortran,gfortran,If Statement,Fortran,Gfortran,我是一个新的Fortran用户,试图运行一个给我的代码,几乎没有指令。当我试图编译时,代码中每隔一条if语句就会出现“Error:unclassifiablestatement at(1)”。初始if语句和最终else语句都不会出现相同的错误。有人有什么建议吗?这可能与每个else if语句的行长度有关吗 program main IMPLICIT REAL*8(A-H, O-Z) character fname1*30 c*************************

我是一个新的Fortran用户,试图运行一个给我的代码,几乎没有指令。当我试图编译时,代码中每隔一条if语句就会出现“Error:unclassifiablestatement at(1)”。初始if语句和最终else语句都不会出现相同的错误。有人有什么建议吗?这可能与每个else if语句的行长度有关吗

      program main

  IMPLICIT REAL*8(A-H, O-Z)
  character fname1*30
c*******************************************
c***** input file: input_fslip
c*****             seismo_bellslip_100yr.dat
c***** output file: tapered_slip.dat
c*******************************************
c***** Define constants
  dimension bound(5,4),deficit(5),akb(4)

  open(1,file='input_fslip')
  rewind 1
  open(2,file='seismo_100yr.dat')
  rewind 2
  open(9,file='tapered_slip.dat')
  rewind 9

  do i=1,4
   read(1,*) (bound(j,i),j=1,5)
  end do
  read(1,*) (deficit(j),j=1,5)
cccc      read(1,*) exp_rate
  do i=1,4
   akb(i)=(bound(4,i)-bound(2,i))/(bound(3,i)-bound(1,i))
  end do

  do i=1,999999999
   read(2,*,end=900) alat,alon,depth,slipn,slipe
cccc segment D
  if(alat.le.((alon-bound(1,1))*akb(1)+bound(2,1)-bound(5,1))) then
     slipn_new = slipn * deficit(1)/100.0
     slipe_new = slipe * deficit(1)/100.0
cccc transition zone between D and C
  else if(alat.gt.((alon-bound(1,1))*akb(1)+bound(2,1)-bound(5,1)).
 *     and.alat.le.((alon-bound(1,1))*akb(1)+bound(2,1)+bound(5,1))) then
     aa=alat-((alon-bound(1,1))*akb(1)+bound(2,1)-bound(5,1))
     bb=((alon-bound(1,1))*akb(1)+bound(2,1)+bound(5,1))-alat
     ddefic=(deficit(2)*aa+deficit(1)*bb)/(aa+bb)
     slipn_new = slipn * ddefic/100.0
     slipe_new = slipe * ddefic/100.0
cccc segment C
  else if(alat.gt.((alon-bound(1,1))*akb(1)+bound(2,1)+bound(5,1)).
 *     and.alat.le.((alon-bound(1,2))*akb(2)+bound(2,2)-bound(5,2))) then
     slipn_new = slipn * deficit(2)/100.0
     slipe_new = slipe * deficit(2)/100.0

代码在这里继续,还有其他几个if语句,但我觉得没有必要包含它们,因为它们具有类似的结构。如果我能提供更多信息,请告诉我。

代码是固定格式的源代码。某个东西出现在哪一列可能很重要。请编辑您的问题,使问题中的代码与您提供给编译器的代码完全相同。编译器通常需要扩展名为
.f
.for
或类似的扩展名才能将文件标识为固定格式源。看起来每个非注释行的开头缺少3个空格。
else if
续行长度明显超过72个字符(可能是因为续行后的修饰缩进)。删除这些空格就可以了。或者,可以打开编译器标志以允许更长的行。对于gfortran,它是
-ffix-line-length-n
,而ifort try
-extend source n
。n=80是一个常见值。这可能会导致棘手的问题。最好使代码标准化。谢谢!-ffix-line-length-n解决了这个问题。