好的,下面的Fortran 90代码有很多问题。程序测试人员应该创建一个名为input的字符数组,将所有条目初始化为空格字符,然后从用户那里获取一些字符串并将其存储在input中。getLength函数应该返回函数中不是空格的最后一个索引;因此,如果用户输入字符串"你好,你好吗?",那么getLength(input)应该返回11。它应该从给定数组的末尾开始,并标记第一个非空格字符出现的位置。当我实际尝试运行它时,gfortran说:"错误:函数getLength在(1)(REAL(4)/INTEGER(4))处的返回类型不匹配。这意味着什么,我做错了什么,我应该如何修复它?提前感谢!
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
看起来不像是在声明外部函数getLength
的类型,所以编译器假设getLength
是默认类型REAL(4)
。考虑将external getLength
替换为类似INTEGER, EXTERNAL :: getLength
的类型。
此外,为了更加清晰,在函数定义中包含IMPLICIT NONE
可能不会有什么坏处。
编辑:另外,使用Fortran处理字符串的方式,您只需将变量输入初始化为空字符串或一个空格。当您没有完全填充字符串的剩余部分时,Fortran总是用空格填充它。您确实应该执行类似CHARACTER(LEN=1000) :: input = ''
的操作来正确初始化input
。