使用g95编译器,我有一个错误:
Error: Operands of comparison operator '.EQ.' at (1) are LOGICAL(4)/LOGICAL(4)
我不知道这意味着什么。我包括子程序。您有任何想法如何解决这个问题吗?
非常感谢你的时间。
SUBROUTINE search(iarray, ItemSought, Found, Location)
CHARACTER(20), DIMENSION(50),INTENT(IN)::itemarray
CHARACTER(20)::ItemSought
LOGICAL, INTENT(OUT)::Found
INTEGER, INTENT(OUT)::Location
INTEGER:: First, Last, Middle
WRITE(*,'(1x,A)',ADVANCE="NO"),"What are you searching for? "
READ*, ItemSought
First=1
Last=SIZE(Iarray)
FOUND = .FALSE.
DO
IF ((First > Last) .OR. Found) RETURN
Middle = (First+Last)/2
IF (ItemSought < Iarray(Middle)) THEN
Last=Middle-1
ELSE IF (ItemSought > Iarray(Middle)) THEN
First=Middle+1
ELSE
Found = .TRUE.
Location = Middle
END IF
END DO
IF (Found == .TRUE.) THEN
PRINT*, Itemsought
END SUBROUTINE
答案 0 :(得分:6)
我不会承认我最后一次使用FORTRAN,但它确实看起来与我记忆中有很多不同。所以这只是猜测。
根据错误信息,我会说它在这一行(你没说哪个):
IF (Found == .TRUE.) THEN
再次猜测,你通常不会通过比较真/假来测试逻辑值,直接使用它:
IF (Found) THEN
答案 1 :(得分:5)
.EQ.
(或==
)关系运算符,就像.NE.
(/=
),.LT.
(<
)等等,仅用于比较数字,用于比较您应使用.EQV.
和.NEQV.