Deb*_*asu 12 command-line fortran
GCC版本4.6
问题:要找到一种方法,将参数输入到可执行文件中,例如a.out
,从命令行 - 更具体地说,输入一个双精度数字数组.
尝试:使用READ(*,*)
标准中较旧的命令:程序test.f
-
PROGRAM MAIN
REAL(8) :: A,B
READ(*,*) A,B
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
Run Code Online (Sandbox Code Playgroud)
执行 -
$ gfortran test.f
$ ./a.out 3.D0 1.D0
Run Code Online (Sandbox Code Playgroud)
这没用.经过一番反省,发现了
$./a.out
3.d0,1.d0
4.0000000000000000 0
Run Code Online (Sandbox Code Playgroud)
确实有效,但第二行是输入提示,并且没有实现以单行完成此操作的目标.此外COMMAND_ARGUMENT_COUNT()
,与PERL不同,显示输入提示中的数字实际上并不算作"命令行参数".
Hig*_*ark 21
如果要在命令行上获取提供给程序的参数,请使用(自Fortran 2003)标准内在子例程GET_COMMAND_ARGUMENT
.这样的事可能有用
PROGRAM MAIN
REAL(8) :: A,B
integer :: num_args, ix
character(len=12), dimension(:), allocatable :: args
num_args = command_argument_count()
allocate(args(num_args)) ! I've omitted checking the return status of the allocation
do ix = 1, num_args
call get_command_argument(ix,args(ix))
! now parse the argument as you wish
end do
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
Run Code Online (Sandbox Code Playgroud)
注意:
get_command_argument
是一个字符变量,您必须将其解析为变为真实(或其他).另请注意,我在args
数组的每个元素中只允许12个字符,您可能想要摆弄它.read
,不会在Fortran程序中读取命令行参数.因为你想读取一个实数的数组,你可能最好使用你已经想到的方法,即在程序启动后从终端读取它们,这取决于你.