2014-12-30 42 views
0

我在FORTRAN的初學者級別。 我需要使用READ-Opiton END。但我得到一個錯誤,沒有定義END標記標籤... 這裏是我的代碼:Fortran 90錯誤:未定義END標籤標籤

subroutine readfiles 

implicit none 


integer :: N, l 
real, allocatable :: pos(:,:) 

N = 2 !Number of Lines 

allocate(orte(N,3)) 

open (unit=99, file='positions.txt', status='old', action='read',) 
do l=1,N 
    read (99,* ,END=999) pos(l,1), pos(l,2), pos(l,3) 
enddo 
do l=1,N 
    print *, pos(l,1), pos(l,2), pos(l,3) 
enddo 

return 
END subroutine readfiles 

這裏是錯誤:

gfortran -c -O3 -fdefault-real-8 -I/usr/include readfiles.f90 
readfiles.f90:22.25: 

    read (99,* ,END=999) pos(l,1), pos(l,2), pos(l,3) 
        1 
Error: END tag label 999 at (1) not defined 
make: *** [readfiles.o] Fehler 1 

什麼想法?謝謝

回答

0

如錯誤信息所示,您需要一個標記爲999的行號,在達到文件結尾時將控制權轉交給它,如下所示。

 subroutine readfiles 

    implicit none 


    integer :: N, l 
    real, allocatable :: pos(:,:) 

    N = 2 !Number of Lines 

    allocate(orte(N,3)) 

    open (unit=99, file='positions.txt', status='old', action='read',) 
    do l=1,N 
     read (99,* ,END=999) pos(l,1), pos(l,2), pos(l,3) 
    enddo 
    999 continue 
    N = l-1 
    do l=1,N 
     print *, pos(l,1), pos(l,2), pos(l,3) 
    enddo 

return 
END subroutine readfiles 

順便說一句我建議不要使用名爲 「l」 的變量,因爲 「L」 的模樣1.

+0

它的工作!謝謝 – Jazz