if语句中的错误,需要标量逻辑表达式

时间:2014-03-27 12:57:21

标签: if-statement types fortran

在子程序中我尝试创建一个语句,但是只有当我直接输入数字时才会起作用,只要我用变量替换数字,它就会给出错误:

||Error: IF clause  requires a scalar LOGICAL expression|

在此示例中,var是0到1之间的实数。

    if ( var%type3 < 0.5) then
            test = 1
    end if

type3组件声明为

    real, dimension(1,1) :: type3

有人可能知道我们做错了什么。因为错误没有给我们任何线索,哪一部分声明是错误的。

2 个答案:

答案 0 :(得分:2)

您尝试使用DIMENSION(1,1)类型作为REAL。

你应该添加(1,1)来访问DIMENSION(1,1)中包含的你的REAL

使用:

  IF ( var%type3(1, 1) < 0.5 ) THEN
     print *, 'IT WORKS'
  END IF

例如,出现此错误:

MODULE vardef
  TYPE vartype
     REAL :: type3(1, 1)
  END TYPE vartype
END MODULE vardef

PROGRAM test
  USE vardef

  TYPE(vartype) var

  var%type3(1, 1) = 0

  IF ( var%type3 < 0.5 ) THEN
     print *, 'IT WORKS'
  END IF
  RETURN

END PROGRAM test

答案 1 :(得分:1)

您的评论var%type3real, dimension(1,1)。这不是标量,var%type3 < 0.5将是一个形状相同的数组。

如错误消息所述,if的测试条件应为标量逻辑。根据您的要求,您的测试条件可能是非详尽列表之一:

  • var%type3(1,1) < 0.5
  • ALL(var%type3 < 0.5)
  • ANY(var%type3 < 0.5)

第一种情况看起来很自然,因为它是一个标量条件,但我留下其他情况,因为你可能会扩展到不是(1,1)数组的情况。