2

使用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
4

2 回答 2

6

我不会承认我上次使用 FORTRAN 是什么时候,但它确实看起来与我记忆中的大不相同。所以这只是一个猜测。

根据错误消息,我会说它在这一行(你没有说哪个):

IF (Found == .TRUE.) THEN

再次只是猜测,您通常不会通过比较真/假来测试逻辑值,而是直接使用它:

IF (Found) THEN
于 2011-04-18T15:55:52.167 回答
5

.EQ.==)关系运算符,就像.NE./=),.LT.<)等,仅用于比较数字,用于比较您应该使用的逻辑值.EQV..NEQV.

于 2011-04-18T16:48:02.637 回答