1

好的,我在使用以下 Fortran 90 代码时遇到了很多麻烦。程序测试人员应该创建一个名为 input 的字符数组,将所有条目初始化为空格字符,然后从用户那里获取一些字符串并将其存储在 input 中。getLength 函数应该返回函数中不是空格的最后一个索引;所以如果用户输入字符串“你好,你好吗?”,那么 getLength(input) 应该返回 11。它应该从给定数组的末尾开始工作,并标记第一个非空格字符出现的位置. 当我实际尝试运行它时,gfortran 说:“错误:在 (1) (REAL(4)/INTEGER(4)) 处返回函数 getLength 的类型不匹配。这是什么意思,我做错了什么,以及如何我应该修复它吗?提前致谢!

    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所以编译器假设它getLength是默认类型REAL(4)。考虑换成external getLength​​类似INTEGER, EXTERNAL :: getLength.

IMPLICIT NONE此外,为了更加清晰,在函数定义中包含一个可能不会有什么坏处。

编辑:此外,使用 Fortran 处理字符串的方式,您应该简单地将变量输入初始化为空字符串或一个空格。当您没有完全填充字符串时,Fortran 将始终用空格填充字符串的其余部分。你真的应该做一些类似CHARACTER(LEN=1000) :: input = ''正确初始化的事情input

于 2011-06-04T01:41:12.067 回答