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
执行 -
$ gfortran test.f
$ ./a.out 3.D0 1.D0
这不起作用。经过一番反省,发现了
$./a.out
3.d0,1.d0
4.0000000000000000 0
确实有效,但第二行是输入提示,并且没有实现以单行完成此操作的目标。此外,COMMAND_ARGUMENT_COUNT()
表明,与PERL不同,输入提示的数字实际上并不算作“命令行参数”。
答案 0 :(得分: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
注意:
get_command_argument
的第二个参数是一个字符变量,您必须将其解析为变为真实(或其他)。另请注意,我在args
数组的每个元素中只允许使用12个字符,您可能想要弄清楚它。read
不用于读取Fortran程序中的命令行参数。由于你想要读取一组实数,你可能最好使用你已经想到的方法,即在程序启动后从终端读取它们,这取决于你。