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。
如果你想获得送入你的程序的命令行参数,使用(自2003年以来的Fortran)标准内子程序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
是你必须要解析变成一个真正的(或其他)字符变量。 还请注意,我只允许12个字符中的每一个元素args
阵列,你可能要摆弄这一点。 - 正如你已经想通了,
read
不用于Fortran程序读取命令行参数。
既然你想读的实数的数组,你可能会更好使用你已经想通了的方法,即从终端读取它们的程序开始后,它给你。
文章来源: Fortran: `READ(*,*)` != Command-line arguments. How to use command line arguments?