在子程序中我尝试创建一个语句,但是只有当我直接输入数字时才会起作用,只要我用变量替换数字,它就会给出错误:
||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
有人可能知道我们做错了什么。因为错误没有给我们任何线索,哪一部分声明是错误的。
答案 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%type3
是real, 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)数组的情况。