2011-04-18 55 views
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 

回答

6

我不会承认我最后一次使用FORTRAN,但它肯定看起来很多不同的比我还记得。所以这只是一个猜测。

基于该错误消息我会说这是在这条线(你没有说):

IF (Found == .TRUE.) THEN 

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

IF (Found) THEN 
+0

这对我来说看起来是正确的。 – 2011-04-18 16:05:02

+0

这工作,非常感谢! – EuropaDust 2011-04-18 16:07:29

5

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