那编了个子程序 为什么子程序的值没有办法返回到主程序呢

那编了个子程序 为什么子程序的值没有办法返回到主程序呢,第1张

不行的,我以前用过的传递方法有两种,一种就是你说的括号里带变量名的传递方式,另外一种是定义公共模块管理全局变量,例如

module common_module

implicit none

real :: var1, var2

end module

然后在主程序子程序中都使用这个模块,则子程序中的变量的值就会带入主程序中,例如

subroutine sub1()

use common_module % 使用公共模块

implicit none

var1=1 % 给全局变量赋值

var2=2

end subroutine

program main

use common_module

implicit none

var1=0

var2=0

write(,) var1, var2 % 调用子程序前的值

call sub1 % 调用子程序sub1,var1,var2重新赋值

write(,) var1, var2 %由于var1作为全局变量使用,var1在子程序中更改,这里是改变后的值

end program

大致用法应该是这样,你试试

这是因为你在子程序中又调用了子程序本身(Call 选区()),这是递归调用,当调用结束时,它并不是直接退出子程序的,而是返回到上一次调用结束的位置,也就是call 选区()后面的语句继续执行,这也就意味着这种嵌套调用,在退出时也是要一层层解套的。

所以这种情况是不适用递归调用的,应该用goto语句跳转到do的前面去再次执行循环。

当然执意用Call 选区()也是可以的,那就在下面加一句Exit Do即可(但本人不建议)。

楼主去看一下书上面,对这两条语句的定义。return是用来对一个函数进行返回,它是基本语句。而exit(0)本身是一个带有一个参数的函数,用来表示这个程序已经结束。之所以你查绝不到他们的区别,是因为这两条语句在main函数里面产生的表面效果是一样的,都是终止了这个程序(但是实质是不同的)。还有,如果在其它函数里面分别加入这两条语句(在这个函数运行完不会导致程序结束的情况下),它们是不同的。楼主亲自去测试一下吧,印象更加深刻。纯手机打字,希望对你有帮助

以上就是关于那编了个子程序 为什么子程序的值没有办法返回到主程序呢全部的内容,包括:那编了个子程序 为什么子程序的值没有办法返回到主程序呢、按键精灵怎么退不出子程序 最后又跳到判断了、return 跟 exit(0) 有什么区别,什么情况下使用。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9718571.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存