如何编写需要输入参数的exe
各位大神,请问有谁知道怎么编写需要输入参数的exe呢,一般program都是不用输入参数的,但是要使调用EXE的时候输入一个参数该怎么办呢?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 . '
WRITE(*,'(A)') ' -n <n> set number of worms, in the range .'
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 請參考: chiangtp 发表于 2020-7-10 23:20
PROGRAM test ...
谢谢你,但是我这里出现问题
CALLget_command_argument(2,VALUE=day2)
CALLget_command_argument(3,VALUE=step)
CALLget_command_argument(1,VALUE=day1)
DO nday=day1,day2,step
当我这样写的时候编译会出现错误The data types of the argument(s) are invalid. ,它好像没有把get_command_argument默认为一个函数,这是怎么回事呢 所有的命令行参数,都必须是 character 字符串类型。
如果你需要其他类型,只能通过再次转换获得。 哦哦,太感谢了!!!
vvt 发表于 2020-7-11 12:58
所有的命令行参数,都必须是 character 字符串类型。
如果你需要其他类型,只能通过再次转换获得。 ...
太感谢了
这个帖子很不错,输入参数的代码并不多见,学习一下
页:
[1]