.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。
我是 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。