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

Command line Fortran:`READ(*,*)`!=命令行参数。如何使用命令行参数?,command-line,fortran,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

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\u-ARGUMENT\u-COUNT()
显示输入提示符中的数字并不像PERL那样真正算作“命令行参数”

如果要在命令行上获取输入到程序的参数,请使用(自Fortran 2003以来)标准内部子例程
get_command_参数
。像这样的东西可能有用

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_参数
    的第二个参数是一个字符变量,您必须对其进行解析才能将其转换为实数(或任何形式)。还要注意的是,我只允许
    args
    数组的每个元素中包含12个字符,您可能需要对此进行修改
  • 正如您已经了解到的,
    read
    不用于读取Fortran程序中的命令行参数

因为你想读取一组实数,你最好使用你已经想出的方法,也就是在程序启动后从终端读取实数,这取决于您。

另一种方法当然是从ASCII或
名称列表
输入文件中读取数字数组,您可以将其名称作为命令行参数传递。谢谢您的精彩回答@High Performance Mark。。。请添加一个部分或链接到一个页面,提供如何设置阅读格式的信息?无法区分哪些是旧的,哪些是新的!
READ(*,*)
在Fortran 2003中应该如何进行解析?当您等待我对您的评论的回复时,请尝试Google.did find。。。但在我的gfortran版本上不编译!编辑:是的。显然,更改文件名会影响程序的内容。再次感谢你!bows
read(*,*)
是标准Fortran,用于从标准输入中直接读取列表。大多数操作系统将标准输入连接到终端。尽管它在语言中已经存在很长时间了,但它并没有什么问题。Fortran 95功能的一个很好的网页:你可以用你的代码做'echo“31”| A.out'。我不建议这样做,但也许这有助于你理解read(*,*)的作用。它确实有效!!谢谢你,乔治。我之前确实尝试过
/a.out | echo'3.1d0 1.d0'
。。但它不起作用。这对我来说更好,因为这样就不需要指定格式,看起来更自然。。对我来说是将军!