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

Operand of .not. operator at (1) is REAL(4)

我是 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)

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