使用“时出现语法错误”;X!=0“;用Fortran语言

使用“时出现语法错误”;X!=0“;用Fortran语言,fortran,gfortran,Fortran,Gfortran,我的Fortran程序有一个问题,它只不过是计算素数分解(或者应该做)。这就是错误: C:\MinGW\Fortran>gfortran aufg3.f90 aufg3.f90:15.15: if (prim(i) != 0 .and. modulo(n, prim(i)) == 0) then 1 Error: Missing ')' in statement at or before (1) aufg3.f90:19.7: end if

我的Fortran程序有一个问题,它只不过是计算素数分解(或者应该做)。这就是错误:

C:\MinGW\Fortran>gfortran aufg3.f90
aufg3.f90:15.15:

    if (prim(i) != 0 .and. modulo(n, prim(i)) == 0) then
               1
Error: Missing ')' in statement at or before (1)
aufg3.f90:19.7:

    end if
       1
Error: Expecting END DO statement at (1)
aufg3.f90:34.13:

  if (prim(i) != 0) then
             1
Error: Missing ')' in statement at or before (1)
aufg3.f90:38.5:

  end if
     1
Error: Expecting END DO statement at (1)
我什么都试过了,但完全不知道会出什么问题。谢谢你的帮助。代码如下:

程序aufg3
隐式无
整数::n,i
整数,可分配,维度(:)::prim
做
印刷品*,“Bite natürliche Zahl eingeben”,0“für Abbruch:”
读*,n
如果(n==0)退出
分配(prim(2:n))
呼叫时代(prim,n)
打印*,n,'=1'
做
如果(n==1)退出
i=2,n吗
如果(prim(i)!=0,模(n,prim(i))=0,则
打印*,“*”,原始(i)
n=n/prim(i)
出口
如果结束
结束
结束
解除分配(prim)
结束
结束程序

子例程era(prim,m) 整数,意图(in)::m 整数,维度(2:m)::prim 整数::i,j i=2,m吗 prim(i)=i 结束 i=2,整数(sqrt(实(m))) 如果(prim(i)!=0),则 doj=i*i,m,i prim(j)=0 结束 如果结束 结束
结束子程序

好吧,这是Fortran和
表示注释。所以编译器实际上看到了

if (prim(i) 
这不是有效的陈述。您看到的错误消息反映了这一点

Fortran中的“不相等”是
/=
.ne.

 if (prim(i) /= 0 .and. modulo(n, prim(i)) == 0) then
后来:

if (prim(i) /= 0) then
fortran中“不等于”的标记为/=!开始注释,因此编译器将第15行读取为

        if (prim(i) 

因为if语句中没有括号来关闭逻辑表达式,所以它很混乱。因此,只需更换!=使用/=应该可以解决这个问题。

您对“不等于”使用了错误的表示法。Fortran语法是
/=
.NE.

因此,您应该使用:

if (prim(i) /= 0 .and. modulo(n, prim(i)) == 0) then


此外,你的
integer(sqrt(real(m)))
语法不正确,也许你的意思是
NINT(sqrt(real(m))

我被另外两个(好)答案吓到了,但别忘了把
integer(sqrt(real(m))
改成
NINT(sqrt(real(m))
。非常感谢!我是Fortran的新手,之前经常使用C语言,所以“!=”只是看起来不错;-)
if (prim(i) /= 0 .and. modulo(n, prim(i)) == 0) then
if (prim(i) /= 0) then