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

时间:2012-12-12 16:06:16

标签: 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

执行 -

$ gfortran test.f
$ ./a.out 3.D0 1.D0

这不起作用。经过一番反省,发现了

$./a.out
3.d0,1.d0
   4.0000000000000000                0

确实有效,但第二行是输入提示,并且没有实现以单行完成此操作的目标。此外,COMMAND_ARGUMENT_COUNT()表明,与PERL不同,输入提示的数字实际上并不算作“命令行参数”。

1 个答案:

答案 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程序中的命令行参数。

由于你想要读取一组实数,你可能最好使用你已经想到的方法,即在程序启动后从终端读取它们,这取决于你。