.not的操作数。 (1)的运算符是REAL(4)

时间:2016-04-26 10:05:02

标签: fortran gfortran

我是Fortran编程的新手。我知道这个错误可能是由于错误的数据类型,但我不知道我应该选择哪种正确的数据类型......

这是我的代码:

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)

1 个答案:

答案 0 :(得分:2)

EOF是一种非标准的内在函数,您使用的编译器可能不支持它。我知道的编译器确实支持这个有EOF返回类型LOGICAL,这是你的程序所期望的。否则Fortran隐式类型会使这个REAL成为逻辑运算符的错误,例如.NOT ..(除非您要求进行标准检查,否则某些编译器不会向您发出警告。)@ francescalus有正确的答案 - 包括IOSTAT = READ中的说明符并使用IS_IOSTAT_EOF(statvar)来测试它。你想在循环之前将“statvar”(或你称之为的任何东西)初始化为0,并确保将其声明为INTEGER。