Fortran if语句错误

时间:2012-11-06 05:38:44

标签: compiler-construction if-statement fortran entropy

我有一个程序可以告诉用户他们输入的温度是否为绝对零度。如果它确实如此,那么他们应该看到“没有熵给你”,如果它更大,那么它应该告诉他们它们是多远超过它们,但我不断收到消息说我的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

3 个答案:

答案 0 :(得分:6)

这是一些无偿的建议,只与您报告的错误相关。

  1. 养成在程序,例程和模块的开头插入implicit none的习惯。在任何其他声明之前,它应该在任何use语句之后。它将帮助您避免意外声明变量,或者在您不希望重新声明它们的范围内重新声明变量。
  2. 养成通过参数列表将所有数据传入或传出例程的习惯。在你的代码中,变量k,f,c(这是什么,炸鸡代码的一部分?)在包含的getMinTemperature的范围内,所以可以在那里使用而不明确地传递它们。但是你现在的方法使得在大型程序中更难以弄清楚正在发生什么,并且会使在其他程序中重用代码变得更加困难。

答案 1 :(得分:4)

假设这是一个家庭作业,我只会给你一些指示而不是答案。首先,重新考虑你的程序的逻辑。你真的需要i的循环吗? 然后,查找the first google hit for achar。你真的需要它吗?另请注意,如果您使用achar注释掉该行,则会编译您的代码,以便后者干扰函数参数的intent(in)属性。

答案 2 :(得分:3)

Zhenya绝对正确。为了给您提供更多提示,您可能希望在函数中使用以下代码示例。您当然必须添加所需的逻辑。您的作业非常适合使用for 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