If statement if语句中出错,需要标量逻辑表达式

If statement if语句中出错,需要标量逻辑表达式,if-statement,types,fortran,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 有人知道我们做错了什么吗。因为错误没有给我们任何线索,说明哪部分是错误的。从您的评论中va

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

||Error: IF clause  requires a scalar LOGICAL expression|
在本例中,var是介于0和1之间的实数

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

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

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

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

  • var%type3(1,1)<0.5
  • ALL(变量%type3<0.5)
  • ANY(变量%type3<0.5)
第一种情况看起来很自然,因为它是一个标量条件,但我将其他情况留给您,因为您可能会扩展到它不是(1,1)数组的情况。

您尝试使用维度(1,1)类型作为实数

您应该添加(1,1)以访问维度(1,1)中包含的yout REAL

使用:

IF(变量%type3(1,1)<0.5)则
打印*,“它有效”
如果结束
获取此错误的示例:

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
模块vardef
类型变量类型
REAL::type3(1,1)
端型变量类型
端模块vardef
程序测试
使用vardef
类型(vartype)变量
变量%type3(1,1)=0
如果(变量%type3<0.5),则
打印*,“它有效”
如果结束
返回
结束程序测试

如果如您所述,
var
是实数,
var%type3
是什么?在Fortran中,实数没有可以使用
%
符号访问的组件。在每个函数中,我都使用百分比符号及其类型作为after变量。这也适用于其他子例程。类型3定义为实尺寸(1,1)。然而,如果我删除该部分,只保留var<0.5,它将给出:| |错误:比较运算符的操作数
  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