我正在尝试使用与我的主程序在同一文件中的模块.但是,我无法让它发挥作用.Fortran是否允许模块包含在与主程序相同的文件中,或者它是否必须位于单独的文件中?这是我的代码的简单版本:
main program
use my_module
call my_subroutine()
end program main
module my_module
contains
subroutine my_subroutine()
print *, "Hello World!"
end subroutine my_subroutine
end module my_module
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此文件时,我得到:
Fatal Error: Can't open module file 'my_module.mod' for reading at (1): No such file or directory
Run Code Online (Sandbox Code Playgroud) 我想以"简单"的方式使用延迟长度的字符串来读取用户输入.我想这样做的原因是我不想在知道用户输入的大小之前声明字符串的大小.我知道有"复杂"的方法来做到这一点.例如,可以使用iso_varying_string模块:https://www.fortran.com/iso_varying_string.f95 .此外,还有一个解决方案:未定义长度的Fortran字符输入.但是,我希望得到的东西简单,或几乎一样简单,如下所示:
program main
character(len = :), allocatable :: my_string
read(*, '(a)') my_string
write(*,'(a)') my_string
print *, allocated(my_string), len(my_string)
end program
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,输出是:
./a.out
here is the user input
F 32765
Run Code Online (Sandbox Code Playgroud)
请注意,没有输出write(*,'(a)') my_string.为什么?
此外,my_string尚未分配.为什么?
为什么这不是Fortran的简单功能?其他语言有这个简单的功能吗?我一般对这个问题缺乏一些基本的了解吗?
在 Fortran 中,这两种初始化参数数组的方法是否相同?如果不是,那是什么意思dimension(*)?
integer, parameter, dimension(2) :: x = [1,2]
对比
integer, parameter, dimension(*) :: x = [1,2]
fortran ×3