我目前正在编写一个程序作为每周作业的一部分,而且我已经碰壁了。对某些人来说这可能是显而易见的,但让我很难过。
我的问题是编译器正在返回这些错误:
我已经尝试了一些代码来尝试和纠正自己,但这让我陷入其他错误。我不清楚为什么顶部的INTENT(IN)
定义会回复给我,而不是一个DUMMY'变量。
同样不知道如何纠正下面的实际参数错误。我已尝试使用我的变量Dial_A_In
和Dial_A_Out
等来返回逻辑值以检查组合,但无效。
这是我的代码:
文本表格中的错误和相关代码:
INTEGER, INTENT(IN) :: Dial_A_In , Dial_B_In , Dial_C_In
返回错误:(1)处的符号不是DUMMY变量。
IF (check_solution() .EQV. .TRUE.) EXIT
返回错误:缺少参数的实际参数' a'在(1)
编辑:我设法修复了check_solution()的调用,它是一个三整数参数字符串,可以在下面看到。完整代码为文字:
SUBROUTINE sevensub(Dial_A_Out, Dial_B_Out, Dial_C_Out, Iteration_Count)
USE globals_mod
INTEGER, INTENT(IN) :: Dial_A_In , Dial_B_In , Dial_C_In
INTEGER, INTENT(OUT) :: Dial_A_Out , Dial_B_Out , Dial_C_Out , Iteration_Count
Iteration_Count = 0
DO Dial_A_Out = 1, Dial_A_In, 1
DO Dial_B_Out = 1, Dial_B_In, 1
DO Dial_C_Out = 1, Dial_C_In, 1
WRITE(*,*) '1st Dial:', Dial_A_Out, '2nd Dial:', Dial_B_Out, '3rd Dial:', Dial_C_Out, 'Number of Iterations:', Iteration_Count
Iteration_Count = Iteration_Count + 1
IF (check_solution(Dial_A_Out, Dial_B_Out, Dial_C_Out) .EQV. .TRUE.) EXIT
END DO
IF (check_solution(Dial_A_Out, Dial_B_Out, Dial_C_Out) .EQV. .TRUE.) EXIT
END DO
IF (check_solution(Dial_A_Out, Dial_B_Out, Dial_C_Out) .EQV. .TRUE.) EXIT
END DO
IF (check_solution(Dial_A_Out, Dial_B_Out, Dial_C_Out) .EQV. .TRUE.) THEN
WRITE(*,*) 'The Combination has been Found'
WRITE(*,*) 'It took', Iteration_Count, 'attempts'
ELSE IF (check_solution(Dial_A_Out, Dial_B_Out, Dial_C_Out) .EQV. .FALSE.) THEN
WRITE(*,*) 'The Combination could not be Found'
END IF
END SUBROUTINE sevensub
问题是我无法打开模块的源文件并查看它所要求的内容,因此它是一种猜谜游戏。
答案 0 :(得分:0)
将关键字INTENT
放入变量声明意味着它是一个虚拟变量。
但是这个虚拟变量不在子程序的参数列表中。
你想要的可能是:
subroutine sevensub(Dial_A_In, Dial_A_Out, Dial_B_In, Dial_B_Out, &
Dial_C_In, Dial_C_Out, Iteration_Count)
use ...
integer, intent(in) : Dial_A_In, Dial_B_In, Dial_C_In
integer, intent(out): Dial_A_Out, Dial_B_Out, Dial_C_Out
integer, intent(out): Iteration_Count
...
end subroutine sevensub