Fortran语言:`READ(*,*)`=命令行参数! 如何使用命令行参数?(Fortran:

2019-07-05 01:35发布

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。

Answer 1:

如果你想获得送入你的程序的命令行参数,使用(自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?