Fortran 接收命令行参数遇到的问题

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个参数开始:

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuiyuan2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值