英文:
Error: Symbol at (1) is not a DUMMY variable
问题
我尝试编写了一个计算两个数的最大公约数(GCD)的代码:
program main
implicit none
integer::A,B,gcd,ans=0
read*,A,B
gcd = gcd(A,B)
write(*,*) 'GCD of ',A,' and ',B,': ',gcd
end program main
recursive function gcd(A,B) result(ans)
implicit none
integer,intent(in)::A,B
integer::ans
if (A==0) ans=B
if (B==0) ans=A
!base_case
if (A==B) ans=A
!recursive_case
if (A>B) then
ans=gcd(A-B,B)
else
ans=gcd(A,B-A)
end if
end function gcd
我的输入是:
98 56
我期望得到 14
,但却得到了以下错误:
source_file.f:5:4:
gcd(A,B)
1
Error: Unclassifiable statement at (1)
我不明白为什么会出现这个错误。如果有人能解释我为什么会出现错误,我将不胜感激。
英文:
I tried to write a code which gives GCD of two number:
program main
implicit none
integer::A,B,gcd,ans=0
read*,A,B
gcd(A,B)
write(*,*)'GCD of ',A,' and ',B,': ',ans
end program main
recursive function gcd(A,B) result(ans)
implicit none
integer,intent(in)::A,B
integer::ans
if (A==0) ans=B
if (B==0) ans=A
!base_case
if (A==B) ans=A
!recursive_case
if (A>B)then
ans=gcd(A-B,B)
else
ans=gcd(A,B-A)
end if
end function gcd
My input was:
98 56
I expect 14
but got this error:
source_file.f:5:4:
gcd(A,B)
1
Error: Unclassifiable statement at (1)
I didn't understand why I am getting this error? I heartily thank if anyone explain me why am I getting error.
答案1
得分: 4
不能为结果变量指定intent(out)
或任何其他意图或相关属性。请参阅https://stackoverflow.com/questions/27827878/fortran-array-cannot-be-returned-in-function-not-a-dummy-variable
只使用
integer::ans
此外,只使用
gcd(A, B)
在Fortran中不是一种有效的使用函数的方式。请使用
ans = gcd(A, B)
或
print *, gcd(A, B)
或类似方法。
请注意,主程序中声明的ans
是一个与函数的结果变量无关的变量。即使名称相同,它们也是两个不同的东西。最好将它们中的一个重命名以使其清晰明了。
英文:
You cannot specify intent(out)
or any other intent or related attribute for the result variable. See https://stackoverflow.com/questions/27827878/fortran-array-cannot-be-returned-in-function-not-a-dummy-variable
Use just
integer::ans
In addition, just
gcd(A,B)
is not a valid way to use a function in Fortran. Use
ans = gcd(A,B)
or
print *, gcd(A,B)
or similar.
Please realize that ans
declared in the main program is a variable that is not related to the result variable of the function. Even if the name is the same, they are two different things. It will be better to rename one of them to make it clear.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论