2016-04-26 9 views
0

私はFortranプログラミングの初心者です。.notのオペランド。 (1)の演算子はREALです(4)

program main 
REAL    :: tempo(3), temp 
INTEGER    :: num_sta, num_sou 

num_sta = 0 
num_sou = 0 
OPEN(11,status="old",file="sou_location.txt") 
OPEN(12,status="old",file="sta_location.txt") 
OPEN(21,file="RESULTS.txt") 

DO WHILE (.NOT. eof(11)) 
    READ(11,*) tempo(:) 
    num_sou = num_sou + 1 
END DO 
REWIND(11) 

DO WHILE (.NOT. eof(12)) 
    READ(12,*) tempo(:) 
    num_sta = num_sta + 1 
END DO 
REWIND(12) 
end program main 

、ここでエラーメッセージです:ここで

は私のコードです...私はこのエラーが間違ったデータ型に起因することがわかっているが、私は私が選ぶべき正しいデータ型を知りません。

eew_loca_H_test.f90:11:18: 

DO WHILE (.NOT. eof(11)) 
       1 
Error: Operand of .not. operator at (1) is REAL(4) 
eew_loca_H_test.f90:17:18: 

DO WHILE (.NOT. eof(12)) 
       1 
Error: Operand of .not. operator at (1) is REAL(4) 
+0

あなたのeofとは何ですか?どこにも定義されていないようです(パスカルから来ていますか?)。そこにLOGICALのexpressiinが必要です。 –

+0

そしてIMPLICIT NONEを使用してください。非常に重要です。 –

+0

これはかつてこれが 'eof'組み込み関数を提供していたコンパイラによってコンパイルされていたと思いますか? – francescalus

答えて

2

EOFは、使用しているコンパイラではおそらくサポートされていない非標準の組み込み関数です。私が知っているコンパイラはこれをサポートしていますが、あなたのプログラムが期待しているタイプのLOGICALを返すEOFを持っています。それ以外の場合は、Fortranの暗黙の型指定によってREALが生成されます。これは、.NOTなどの論理演算子のエラーです(標準チェックを要求しない限り、コンパイラによって警告されません)。@francescalusには正しい答えがあります。 =指定子を読み取り、IS_IOSTAT_EOF(statvar)を使用してテストします。ループの前に "statvar"(またはそれを呼び出すもの)を0に初期化し、それを必ずINTEGERとして宣言します。

関連する問題