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 に答える