代码中的各种错误
Various Errors within Code
我目前正在编写一个程序作为每周作业的一部分,但我碰壁了。这对某些人来说可能是显而易见的,但让我很困惑。
我的问题是编译器 return 处理这些错误:
我尝试修改代码以尝试纠正自己,但这让我遇到了其他错误。我不太确定为什么顶部的 INTENT(IN)
定义作为 'not a DUMMY' 变量返回给我。
以及不知道如何更正下面的实参错误。我尝试使用我的变量 Dial_A_In
和 Dial_A_Out
等 return 逻辑值来检查组合,但无济于事。
这是我的代码:
文本形式的错误和相关代码:
INTEGER, INTENT(IN) :: Dial_A_In , Dial_B_In , Dial_C_In
Returns 错误:(1) 处的符号不是 DUMMY 变量。
IF (check_solution() .EQV. .TRUE.) EXIT
Returns 错误:在 (1)
处缺少参数 'a' 的实际参数
编辑:我已经设法修复了对 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
问题是我无法打开模块的源文件并查看它调用的是什么,所以这是一种猜谜游戏。
将关键字 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
我目前正在编写一个程序作为每周作业的一部分,但我碰壁了。这对某些人来说可能是显而易见的,但让我很困惑。
我的问题是编译器 return 处理这些错误:
我尝试修改代码以尝试纠正自己,但这让我遇到了其他错误。我不太确定为什么顶部的 INTENT(IN)
定义作为 'not a DUMMY' 变量返回给我。
以及不知道如何更正下面的实参错误。我尝试使用我的变量 Dial_A_In
和 Dial_A_Out
等 return 逻辑值来检查组合,但无济于事。
这是我的代码:
文本形式的错误和相关代码:
INTEGER, INTENT(IN) :: Dial_A_In , Dial_B_In , Dial_C_In
Returns 错误:(1) 处的符号不是 DUMMY 变量。
IF (check_solution() .EQV. .TRUE.) EXIT
Returns 错误:在 (1)
处缺少参数 'a' 的实际参数编辑:我已经设法修复了对 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
问题是我无法打开模块的源文件并查看它调用的是什么,所以这是一种猜谜游戏。
将关键字 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