13

GCC バージョン 4.6

問題:コマンド ラインから実行可能ファイルにパラメーターを入力する方法を見つけることa.out。具体的には、倍精度数の配列を入力することです。

試行:READ(*,*)標準で古いコマンドを使用: Program 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

動作しますが、2 行目は入力プロンプトであり、これを 1 行で実行するという目的は達成されません。また、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

ノート:

  • サブルーチンの 2 番目の引数get_command_argumentは文字変数で、これを解析して実数 (またはその他) に変換する必要があります。argsまた、配列の各要素に 12 文字しか許可していないことにも注意してください。
  • すでにわかってreadいるように、Fortran プログラムのコマンド ライン引数の読み取りには使用されません。

実数の配列を読みたいので、プログラムの開始後に端末からそれらを読み取るという、既に理解したアプローチを使用する方が良いかもしれません。それはあなた次第です。

于 2012-12-12T16:21:11.567 に答える