(1) 处的 .not. 运算符的操作数是 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返回类型为LOGIC,这是您的程序所期望的。否则,Fortran 隐式类型会使此 REAL,这对于逻辑运算符(如 .NOT)来说是一个错误。(有些编译器不会警告你这一点,除非你要求标准检查。@francescalus有正确的答案 - 在读取中包含IOSTAT=说明符并使用IS_IOSTAT_EOF(statvar)对其进行测试。您需要在循环之前将"statvar"(或任何您称之为它的东西)初始化为 0,并确保将其声明为 INTEGER。

最新更新