Fortran:在声明中遗漏')'

M. *_*ier 5 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
       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)
Run Code Online (Sandbox Code Playgroud)

我尝试了一切,但完全不知道出了什么问题.谢谢你的帮助.这是代码:

program aufg3
    implicit none
    integer :: n, i
    integer, allocatable, dimension(:) :: prim
    do
        print *, 'Bitte natürliche Zahl eingeben, "0" für Abbruch: '
        read *, n
        if (n == 0) exit
        allocate(prim(2:n))
        call era(prim, n)
        print *, n, ' = 1'
        do
            if (n == 1) exit
            do i = 2, n
                if (prim(i) != 0 .and. modulo(n, prim(i)) == 0) then
                    print *, ' * ', prim(i)
                    n = n / prim(i)
                    exit
                end if
            end do
        end do
        deallocate(prim)
    end do
end program

subroutine era(prim, m) integer, intent(in) :: m integer, dimension(2:m) :: prim integer :: i, j do i = 2, m prim(i) = i end do do i = 2, integer(sqrt(real(m))) if (prim(i) != 0) then do j = i*i, m, i prim(j) = 0 end do end if end do end subroutine

Ale*_*ogt 6

好吧,这是Fortran,并!表示评论.所以编译器实际上看到了

if (prim(i) 
Run Code Online (Sandbox Code Playgroud)

这不是有效的声明.您看到的错误消息反映了这一点.

Fortran中的"不相等"是:/=.ne.

 if (prim(i) /= 0 .and. modulo(n, prim(i)) == 0) then
Run Code Online (Sandbox Code Playgroud)

后来:

if (prim(i) /= 0) then
Run Code Online (Sandbox Code Playgroud)


Ros*_*oss 5

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

所以你应该使用:

if (prim(i) /= 0 .and. modulo(n, prim(i)) == 0) then
Run Code Online (Sandbox Code Playgroud)

if (prim(i) /= 0) then
Run Code Online (Sandbox Code Playgroud)

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