2011-06-03 82 views
1

好的,我在與下面的Fortran 90代碼MUCHO麻煩。程序測試人員應該創建一個名爲input的字符數組,將所有條目初始化爲空格字符,然後從用戶處獲取一些字符串並將其存儲在輸入中。 getLength函數應該返回函數中最後一個不是空格的索引;因此,如果用戶輸入字符串「Hello,過得好嗎?」,然後的getLength(輸入)應該返回11.這應該由從給定的數組的末尾,和標記的第一個非空格字符出現工作。當我其實嘗試運行它,gfortran說:「錯誤:在(1)(REAL(4)/ INTEGER(4))這是什麼意思,我在做什麼功能的getLength的返回類型不匹配做錯了,以及如何我應該修復它?在此先感謝!迭代一個FORTRAN字符數組

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 
+0

你向我們展示的代碼是不是真的你編譯代碼,是嗎? – eriktous 2011-06-06 23:24:14

回答

1

它看起來並不像你聲明外部函數getLength所以編譯器是假設getLength是默認類型REAL(4)的類型。考慮交換external getLength對於

也未嘗有型似INTEGER, EXTERNAL :: getLength,它可能不會傷害到包括額外CLAR函數定義內的IMPLICIT NONE性。

編輯:另外,用Fortran將字符串的方式,您只需簡單地輸入變量初始化一個空字符串或一個空格。如果沒有完全填充,Fortran將始終用空白填充字符串的其餘部分。你真的應該做些像​​CHARACTER(LEN=1000) :: input = ''正確初始化input