2012-11-06 162 views
1

我有一個應該告訴用戶,如果他們進入了一個溫度爲絕對零度的程序。如果確實如此,那麼他們應該看到「對你沒有熵」,如果它更大,那麼它應該告訴他們他們有多遠,但我總是收到消息說我的言論有錯誤,不知道在哪裏開始,任何人都可以幫助我在這裏?Fortran的if語句錯誤

PROGRAM Project2 

CHARACTER(1):: tempType 
REAL:: k, f, c 
REAL:: temp 
REAL:: answer 

PRINT *, "What is the temperature type?" 
READ *, tempType 
PRINT *, "whats the temp?" 
READ *, temp 

k = 0.0 
c = -273.15 
f = -459.67 

answer = getMinTemperature(tempType) 
PRINT *, answer 


CONTAINS 

FUNCTION getMinTemperature(tempType) 
REAL:: getMinTemperature 
CHARACTER(1), INTENT(IN):: tempType 
REAL:: temp 
DO i = 1, num 
IF(ACHAR(tempType(i)) <= temp .AND. k > temp) THEN 
k= 0.0 
getMinTemperature = k 
EXIT 
ELSE IF (c <= temp .AND. c > temp) THEN 
c= -273.15 
getMinTemperature = c 
EXIT 
ELSE IF (f <= temp .AND. f > temp) THEN 
f=-459.67 
getMinTemperature = f 
EXIT 
END IF 
END DO 

END FUNCTION 

END PROGRAM Project2 

回答

4

假設它是一門功課,我只給你一對夫婦的指針,而不是答案。首先,重新考慮你的程序的邏輯。你真的需要循環過i嗎? 然後,查看the first google hit for achar。你真的需要它嗎?另外請注意,如果您用achar註釋掉該行,則代碼會進行編譯,因此後者會干擾函數參數的intent(in)屬性。

+0

+1有關問題的很好的提示,而不直接給出答案。 – Chimera

3

Zhenya是絕對正確的。爲了給你提供更多的提示,你可能想在你的函數中使用下面的代碼示例。您當然必須添加所需的邏輯。你的任務很適合使用於SELECT CASE

SELECT CASE (tempType) 
CASE ('k', 'K') 
    ! do something - kelvin input 
CASE ('c', 'C') 
    ! do something - celsius input 
CASE ('f', 'F') 
    ! do something - fahrenheit input 
CASE DEFAULT 
    ! handle input error 
END SELECT 
6

這裏的一些沒來由的建議,只切向有關向你彙報的錯誤。

  1. 養成在程序,例程和模塊開始時插入implicit none的習慣。它應該在任何use聲明之後,在任何其他聲明之前。它可以幫助您避免變量的意外聲明,或者在您不希望重新聲明的範圍內重新聲明變量。
  2. 獲取到傳入或流出的所有數據的程序通過其參數列表的習慣。在你的代碼中,變量k,f,c(這是什麼,是炸雞代碼的一部分?)在包含的getMinTemperature的範圍內,因此可以在那裏使用而不必明確地傳遞它們。但是,目前的方法使得在大型程序中更難以找出正在發生的事情,並且使得在其他程序中重用代碼變得更加困難。
+0

+1只爲'肯德基'

+0

+1不錯的答案。 – Chimera