Fortran 中接收命令行参数时,第0个参数是程序本身,第1个参数才是开始了真正的输入参数。这种对应关系是严格的。所以赋值时必须注意!!!
以下代码是ap8ae8参数输入部分:
i=0
DO
CALL get_command_argument(i,crg)
IF(LEN_TRIM(crg)==0)EXIT
WRITE(*,*)i,crg
IF(i==1) THEN
OutputFileName=crg
WRITE(*,*)OutputFileName
! ELSE IF(i==2) THEN
! Read(crg,*)lenOfOutputFileName
ELSE IF(i==2) THEN
Read(crg,*)coordType
ELSE IF(i==3) THEN
Read(crg,*)L_FROMFILE_Start
ELSE IF(i==4) THEN
Read(crg,*)L_FROMFILE_End
ELSE IF(i==5) THEN
Read(crg,*)L_FROMFILE_Gap
ELSE IF(i==6) THEN
Read(crg,*)BB0_FROMFILE_Start
ELSE IF(i==7) THEN
Read(crg,*)BB0_FROMFILE_End
ELSE IF(i==8) THEN
Read(crg,*)BB0_FROMFILE_Gap
ELSE IF(i==9) THEN
Read(crg,*)xlatStart
ELSE IF(i==10) THEN
Read(crg,*)xlatEnd
ELSE IF(i==11) THEN
Read(crg,*)xlatGap
ELSE IF(i==12) THEN
Read(crg,*)xlongStart
ELSE IF(i==13) THEN
Read(crg,*)xlongEnd
ELSE IF(i==14) THEN
Read(crg,*)xlongGap
ELSE IF(i==15) THEN
Read(crg,*)yearStart
ELSE IF(i==16) THEN
Read(crg,*)yearEnd
ELSE IF(i==17) THEN
Read(crg,*)yearGap
ELSE IF(i==18) THEN
Read(crg,*)heightStart
ELSE IF(i==19) THEN
Read(crg,*)heightEnd
ELSE IF(i==20) THEN
Read(crg,*)heightGap
ELSE IF(i==21) THEN
Read(crg,*)MODEL
ELSE IF(i==22) THEN
Read(crg,*)FLUXTYPE
ELSE IF(i==23) THEN
Read(crg,*)E1
ELSE IF(i==24) THEN
Read(crg,*)E2
ELSE
Write(*,*)'hello'
END IF
i=i+1
END DO
程序命令行运行:
./ap8ae8 tomm.txt 1 1 5 1 1 5 1 1 1 1 2 2 2 2000 2000 1 10 10 1 1 1 4 8
以上代码和命令是正确的,可以看到输出结果,是从第0个参数开始:
但是如果写成如下代码:
i=1
DO
CALL get_command_argument(i,crg)
IF(LEN_TRIM(crg)==0)EXIT
WRITE(*,*)i,crg
IF(i==1) THEN
OutputFileName=crg
WRITE(*,*)OutputFileName
! ELSE IF(i==2) THEN
! Read(crg,*)lenOfOutputFileName
ELSE IF(i==2) THEN
Read(crg,*)coordType
ELSE IF(i==3) THEN
Read(crg,*)L_FROMFILE_Start
ELSE IF(i==4) THEN
Read(crg,*)L_FROMFILE_End
ELSE IF(i==5) THEN
Read(crg,*)L_FROMFILE_Gap
ELSE IF(i==6) THEN
Read(crg,*)BB0_FROMFILE_Start
ELSE IF(i==7) THEN
Read(crg,*)BB0_FROMFILE_End
ELSE IF(i==8) THEN
Read(crg,*)BB0_FROMFILE_Gap
ELSE IF(i==9) THEN
Read(crg,*)xlatStart
ELSE IF(i==10) THEN
Read(crg,*)xlatEnd
ELSE IF(i==11) THEN
Read(crg,*)xlatGap
ELSE IF(i==12) THEN
Read(crg,*)xlongStart
ELSE IF(i==13) THEN
Read(crg,*)xlongEnd
ELSE IF(i==14) THEN
Read(crg,*)xlongGap
ELSE IF(i==15) THEN
Read(crg,*)yearStart
ELSE IF(i==16) THEN
Read(crg,*)yearEnd
ELSE IF(i==17) THEN
Read(crg,*)yearGap
ELSE IF(i==18) THEN
Read(crg,*)heightStart
ELSE IF(i==19) THEN
Read(crg,*)heightEnd
ELSE IF(i==20) THEN
Read(crg,*)heightGap
ELSE IF(i==21) THEN
Read(crg,*)MODEL
ELSE IF(i==22) THEN
Read(crg,*)FLUXTYPE
ELSE IF(i==23) THEN
Read(crg,*)E1
ELSE IF(i==24) THEN
Read(crg,*)E2
ELSE
Write(*,*)'hello'
END IF
i=i+1
END DO
也是正确的,输出结果是从第1个参数开始: