我有一个程序可以告诉用户他们输入的温度是否为绝对零度。如果它确实如此,那么他们应该看到“没有熵给你”,如果它更大,那么它应该告诉他们它们是多远超过它们,但我不断收到消息说我的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
答案 0 :(得分:6)
这是一些无偿的建议,只与您报告的错误相关。
implicit none
的习惯。在任何其他声明之前,它应该在任何use
语句之后。它将帮助您避免意外声明变量,或者在您不希望重新声明它们的范围内重新声明变量。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