2011-04-18 57 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.