1

わかりました、次の Fortran 90 コードで多くの問題が発生しています。プログラム テスターは、input という文字配列を作成し、すべてのエントリを空白文字に初期化してから、ユーザーから文字列を取得して入力に格納する必要があります。getLength 関数は、スペースではない関数内の最後のインデックスを返すことになっています。したがって、ユーザーが文字列「こんにちは、お元気ですか?」を入力した場合、getLength(input) は 11 を返す必要があります。これは、指定された配列の末尾から開始し、スペース以外の最初の文字が発生した場所をマークすることで機能するはずです。 . 実際に実行しようとすると、gfortran は次のように述べています。修正する必要がありますか? 前もって感謝します!

    program tester
    implicit none
    character(len = 1000) :: input
    external getLength
    do i = 1, 1000
        input(i) = " " 
    end do
    read *, input
    print *, getLength(input)
    end program

    integer function getLength(array) result (length)
    character(len=1000) :: array
    integer :: lenTemp = 1000
    do while (array(lenTemp:lenTemp) == ' ')
        lenTemp = lenTemp - 1
    end do
    length = lenTemp
    end function
4

1 に答える 1

1

外部関数の型を宣言しているようには見えないため、コンパイラはそれがデフォルトの型であるgetLengthと想定しています。のようなタイプのものと交換することを検討してください。getLengthREAL(4)external getLengthINTEGER, EXTERNAL :: getLength

IMPLICIT NONEまた、より明確にするために、関数定義の中に を含めても問題はないでしょう。

編集: さらに、Fortran が文字列を処理する方法では、変数入力を空の文字列または 1 つの空白スペースに初期化する必要があります。文字列を完全に埋めない場合、Fortran は常に残りの文字列を空白で埋めます。あなたは本当にCHARACTER(LEN=1000) :: input = ''適切に初期化するようなことをするべきですinput.

于 2011-06-04T01:41:12.067 に答える