Fortran 代码中的各种错误

Fortran 代码中的各种错误,fortran,gfortran,Fortran,Gfortran,我目前正在写一个程序作为每周作业的一部分,我遇到了麻烦。这对一些人来说可能是显而易见的,但却难住了我 我的问题是编译器返回以下错误: 我已经尝试了一些代码来纠正自己,但这让我遇到了其他错误。我不太清楚为什么顶部的INTENT(IN)定义会作为“非虚拟”变量返回给我 IF (check_solution() .EQV. .TRUE.) EXIT 以及不知道如何更正下面的实际参数错误。我尝试使用变量Dial_A_In和Dial_A_Out等返回逻辑值以检查组合,但无效 这是我的密码: 文本形式的

我目前正在写一个程序作为每周作业的一部分,我遇到了麻烦。这对一些人来说可能是显而易见的,但却难住了我

我的问题是编译器返回以下错误:

我已经尝试了一些代码来纠正自己,但这让我遇到了其他错误。我不太清楚为什么顶部的
INTENT(IN)
定义会作为“非虚拟”变量返回给我

IF (check_solution() .EQV. .TRUE.) EXIT 
以及不知道如何更正下面的实际参数错误。我尝试使用变量
Dial_A_In
Dial_A_Out
等返回逻辑值以检查组合,但无效

这是我的密码:

文本形式的错误和相关代码:

INTEGER, INTENT(IN) :: Dial_A_In , Dial_B_In , Dial_C_In 
返回错误:(1)处的符号不是伪变量

IF (check_solution() .EQV. .TRUE.) EXIT 
返回错误:在(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

直接在此处发布相关代码和错误,如text.INTEGER,INTENT(IN)::Dial_A_IN,Dial_B_IN,Dial_C_IN返回错误:(1)处的符号不是伪变量。IF(check_solution().EQV..TRUE.)EXIT返回错误:在(1)处缺少参数“a”的实际参数。问题是我无法打开模块的源文件并查看它调用的内容,因此这是一种猜测游戏。而不是将注释作为一团混乱。取而代之的是,把你的帖子放在那里,在那里它可以被正确地格式化并且容易地看到。我已经在问题中包括了图片,但是请将它们添加为纯文本。关于
check\u solution
的错误,您需要确定调用该函数的正确方式。对于有关虚拟变量的投诉:
dial_a_in
等不是虚拟变量,因此它们不能具有
intent
属性。我们需要知道,为了能够恰当地表达答案,您必须达到何种理解水平。我已经设法找到了check_solution()函数,因为它需要使用一个三变量参数。我使用了Dial_A-C_Out的值,因为这是要对照存储在模块文件中的变量进行检查的变量。目前我正在学习本课程的第7周,但这是我第一次在Fortran中遇到子程序和ARG字符串。非常感谢,我刚刚刷新了SO页面,您已经确认了我刚才所写的内容。我无法理解它为什么会抛出错误,但我将它添加到子程序的顶部,它还没有抛出任何错误。再次感谢你