13

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 不同,输入提示中的数字并不能真正算作“命令行参数”。

4

1 回答 1

24

如果您想在命令行上获取提供给程序的参数,请使用(自 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 程序中的命令行参数。

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

于 2012-12-12T16:21:11.567 回答