Fortran Coder

查看: 15623|回复: 6
打印 上一主题 下一主题

[求助] 如何编写需要输入参数的exe

[复制链接]

12

帖子

6

主题

0

精华

入门

F 币
65 元
贡献
41 点
跳转到指定楼层
楼主
发表于 2020-7-10 22:26:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,请问有谁知道怎么编写需要输入参数的exe呢,一般program都是不用输入参数的,但是要使调用EXE的时候输入一个参数该怎么办呢?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

沙发
发表于 2020-7-10 23:20:06 | 只看该作者
[Fortran] 纯文本查看 复制代码
PROGRAM test                                                                                              
  IMPLICIT NONE                                                                                           
                                                                                                          
  INTEGER, PARAMETER :: max_length=1024                                                                   
  INTEGER, PARAMETER :: max_number=40                                                                     
                                                                                                          
  ! Options                                                                                               
  CHARACTER(4)  :: field                                                                                  
  INTEGER       :: length                                                                                 
  INTEGER       :: number                                                                                 
  CHARACTER(1)  :: trail                                                                                  
                                                                                                          
  INTEGER       :: iarg, narg, ier                                                                        
  CHARACTER(80) :: copt                                                                                   
                                                                                                          
  !-------------------------------------                                                                  
  ! Options:                                                                                              
  !                                                                                                       
  !  -f      fill screen with copies of 'WORM' at start.                                                  
  !  -l <n>  set worm length                                                                              
  !  -n <n>  set number of worms                                                                          
  !  -t      make worms leave droppings                                                                   
  !-------------------------------------                                                                  
                                                                                                          
  ! Get the number of arguments passed on the command line                                                
  narg = COMMAND_ARGUMENT_COUNT()                                                                         
                                                                                                          
  ! Default setting                                                                                       
  field  = " "        ! fill screen with copies of 'WORM' at start.                                       
  length = 16         ! set worm length                                                                   
  number = 3          ! set number of worms                                                               
  trail  = ' '        ! make worms leave droppings                                                        
                                                                                                          
  ! Parse arguments                                                                                       
  iarg = 1                                                                                                
  DO WHILE( iarg <= narg )                                                                                
     CALL GET_COMMAND_ARGUMENT(iarg, VALUE=copt)                                                          
                                                                                                          
     SELECT CASE( copt )                                                                                  
     CASE('-f', '-F'); field = "WORM"                                                                     
     CASE('-t', '-T'); trail = '.'                                                                        
                                                                                                          
     CASE('-l', '-L')                                                                                     
       iarg = iarg+1                                                                                      
       IF( iarg <= narg ) THEN                                                                            
         CALL GET_COMMAND_ARGUMENT(iarg, VALUE=copt)                                                      
         READ(copt,*,IOSTAT=ier) length                                                                   
         IF( ier /= 0 ) THEN                                                                              
           CALL usage()                                                                                   
           STOP 'Error-1'                                                                                 
         END IF                                                                                           
         IF( length<2 .OR. length>max_length ) THEN                                                       
           WRITE(*,'(A,I0)') "Error: Invalid length of worms - ", length                                  
           CALL usage()                                                                                   
           STOP 'Error-2'                                                                                 
         END IF                                                                                           
       ELSE                                                                                               
         CALL usage()                                                                                     
         STOP 'Error-3'                                                                                   
       END IF                                                                                             
                                                                                                          
     CASE('-n', '-N')                                                                                     
       iarg = iarg+1                                                                                      
       IF( iarg <= narg ) THEN                                                                            
         CALL GET_COMMAND_ARGUMENT(iarg, VALUE=copt)                                                      
         READ(copt,*,IOSTAT=ier) number                                                                   
         IF( ier /= 0 ) THEN                                                                              
           CALL usage()                                                                                   
           STOP 'Error-4'                                                                                 
         END IF                                                                                           
         IF( number<1 .OR. number>max_number ) THEN                                                       
           WRITE(*,'(A,I0)') "Error: Invalid number of worms - ", number                                  
           CALL usage()                                                                                   
           STOP 'Error-5'                                                                                 
         END IF                                                                                           
       ELSE                                                                                               
         CALL usage()                                                                                     
         STOP 'Error-6'                                                                                   
       END IF                                                                                             
                                                                                                          
     CASE DEFAULT                                                                                         
        CALL usage()                                                                                      
        STOP 'Error-7'                                                                                    
     END SELECT                                                                                           
     iarg = iarg+1                                                                                        
  END DO                                                                                                  
                                                                                                          
  !-------------------------------------                                                                  
                                                                                                          
CONTAINS                                                                                                  
                                                                                                          
  SUBROUTINE usage()                                                                                      
    IMPLICIT NONE                                                                                         
                                                                                                          
    CHARACTER(1024) :: string                                                                             
                                                                                                          
    !---------------                                                                                      
                                                                                                          
    CALL GET_COMMAND(string)                                                                              
    WRITE(*,*)                                                                                            
    WRITE(*,'(A)') ' Your commandline: '//TRIM(string)                                                    
    WRITE(*,*)                                                                                            
                                                                                                          
    WRITE(*,'(A)') ' ---------------------------------------------------------------'                     
    WRITE(*,'(A)') '                                                                '                     
    WRITE(*,'(A)') ' Usage:   test [-f] [-l <n>] [-n <n>] [-t]                      '                     
    WRITE(*,'(A)') '                                                                '                     
    WRITE(*,'(A)') '                                                                '                     
    WRITE(*,'(A)') ' Options:                                                       '                     
    WRITE(*,'(A)') '            -f       fill screen with copies of "WORM" at start.'                     
    WRITE(*,'(A)') '            -l <n>   set worm length, in the range [2,1024].    '                     
    WRITE(*,'(A)') '            -n <n>   set number of worms, in the range [1,40].  '                     
    WRITE(*,'(A)') '            -t       make worms leave droppings.                '                     
    WRITE(*,'(A)') '                                                                '                     
    WRITE(*,'(A)') ' Example: test -f -l 20 -n 5 -t                                 '                     
    WRITE(*,'(A)') ' ---------------------------------------------------------------'                     
    WRITE(*,'(A)')                                                                                        
  END SUBROUTINE usage                                                                                    
                                                                                                          
END PROGRAM test                                                                                          
請參考:

12

帖子

6

主题

0

精华

入门

F 币
65 元
贡献
41 点
板凳
 楼主| 发表于 2020-7-11 12:02:05 | 只看该作者
chiangtp 发表于 2020-7-10 23:20
[mw_shl_code=fortran,true]PROGRAM test                                                               ...

谢谢你,但是我这里出现问题      
  CALL  get_command_argument(2,VALUE=day2)
  CALL  get_command_argument(3,VALUE=step)
  CALL  get_command_argument(1,VALUE=day1)
   
    DO nday=day1,day2,step
当我这样写的时候编译会出现错误The data types of the argument(s) are invalid.   [GET_COMMAND_ARGUMENT],它好像没有把get_command_argument默认为一个函数,这是怎么回事呢

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2020-7-11 12:58:35 | 只看该作者
所有的命令行参数,都必须是 character 字符串类型。
如果你需要其他类型,只能通过再次转换获得。

12

帖子

6

主题

0

精华

入门

F 币
65 元
贡献
41 点
5#
 楼主| 发表于 2020-7-11 13:05:07 | 只看该作者
哦哦,太感谢了!!!

12

帖子

6

主题

0

精华

入门

F 币
65 元
贡献
41 点
6#
 楼主| 发表于 2020-7-11 13:06:03 | 只看该作者
vvt 发表于 2020-7-11 12:58
所有的命令行参数,都必须是 character 字符串类型。
如果你需要其他类型,只能通过再次转换获得。 ...

太感谢了

1

帖子

0

主题

0

精华

新人

F 币
16 元
贡献
6 点
7#
发表于 2021-2-7 14:54:38 | 只看该作者
这个帖子很不错,输入参数的代码并不多见,学习一下
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 00:16

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表