|
1 | | -! In program name, - is not allowed |
2 | 1 | program evenodd |
3 | | -character(len=10) :: argument |
4 | | -Character(26) :: low = 'abcdefghijklmnopqrstuvwxyz' |
5 | | -Character(26) :: cap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
6 | | -integer :: number, check_capital_letters, check_small_letters, remainder |
7 | | -! Anything not equal to single argument, Print Error |
8 | | -IF(COMMAND_ARGUMENT_COUNT().NE.1)THEN |
9 | | - write(*,'(g0.8)')"Usage: please input a number" |
10 | | - STOP |
11 | | -ENDIF |
| 2 | + implicit none |
| 3 | + character(len=12) :: arg |
| 4 | + character(len=52) :: letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| 5 | + integer :: number, ios, argc |
12 | 6 |
|
13 | | -CALL GET_COMMAND_ARGUMENT(1,argument) |
14 | | -if (argument == "") then |
15 | | - write(*,'(g0.8)')"Usage: please input a number" |
16 | | - STOP |
17 | | -endif |
18 | | -! Scan for letters |
19 | | -check_capital_letters = scan(argument, cap) |
20 | | -check_small_letters = scan(argument, low) |
21 | | -! If capital letters exist, print error |
22 | | -if (check_capital_letters > 0) then |
23 | | - write(*,'(g0.8)')"Usage: please input a number" |
24 | | - STOP |
25 | | -endif |
26 | | -! If small letters exist, print error |
27 | | -if (check_small_letters > 0) then |
28 | | - write(*,'(g0.8)')"Usage: please input a number" |
29 | | - STOP |
30 | | -endif |
31 | | -! read the cmd line arg into number |
32 | | -read (argument, '(I10)') number |
33 | | -! get the remainder |
34 | | -remainder = modulo(number, 2) |
35 | | -if (remainder == 0) then |
36 | | - write(*,'(g0.8)') "Even" |
37 | | -else |
38 | | - write(*,'(g0.8)') "Odd" |
39 | | -end if |
40 | | -end program |
| 7 | + argc = command_argument_count() |
| 8 | + if (argc /= 1) call usage() |
| 9 | + |
| 10 | + call get_command_argument(1, arg) |
| 11 | + if (len_trim(arg) == 0) call usage() |
| 12 | + if (scan(arg, letters) > 0) call usage() |
| 13 | + |
| 14 | + read(arg, *, iostat=ios) number |
| 15 | + if (ios /= 0) call usage() |
| 16 | + |
| 17 | + if (mod(number,2) == 0) then |
| 18 | + write(*,*) "Even" |
| 19 | + else |
| 20 | + write(*,*) "Odd" |
| 21 | + end if |
| 22 | + |
| 23 | +contains |
| 24 | + |
| 25 | + subroutine usage() |
| 26 | + write(*,*) "Usage: please input a number" |
| 27 | + stop |
| 28 | + end subroutine |
| 29 | + |
| 30 | +end program evenodd |
0 commit comments