1

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

3 回答 3

6

这是一些无端的建议,仅与您报告的错误无关。

  1. implicit none养成在程序、例程和模块开头插入的习惯。它应该在任何use声明之后,在任何其他声明之前。它将帮助您避免意外声明变量,或在您不希望重新声明它们的范围内重新声明变量。
  2. 养成通过参数列表将所有数据传入或传出例程的习惯。在您的代码中,变量k,f,c(这是什么,炸鸡代码的一部分?)在包含的范围内,getMinTemperature因此可以在那里使用而无需显式传递它们。但是您当前的方法使得在大型程序中更难弄清楚发生了什么,并且会使在其他程序中重用代码变得更加困难。
于 2012-11-06T07:52:36.623 回答
4

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

于 2012-11-06T05:57:36.773 回答
3

振亚是绝对正确的。只是为了给您更多提示,您可能希望在函数中使用以下代码示例。您当然必须添加所需的逻辑。您的作业非常适合使用 forSELECT 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
于 2012-11-06T06:38:29.153 回答