Skip to content

Commit 8a96f63

Browse files
authored
Modify Even Odd in Fortran (#5117)
Improve Even Odd Fortran code snippet
1 parent 48afc52 commit 8a96f63

File tree

1 file changed

+28
-38
lines changed

1 file changed

+28
-38
lines changed

archive/f/fortran/even-odd.f95

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,30 @@
1-
! In program name, - is not allowed
21
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
126

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

Comments
 (0)