program learn_show_progress
use iso_c_binding
implicit none
interface
subroutine wait(usec) bind(C,name='usleep')
use iso_c_binding
integer(c_int),value::usec
end subroutine wait
end interface
integer :: n
write(*, *) 'initialize progress'
do n = 1,100
call wait(100000)
call show_progress(n/100.0)
enddo
write(*,*)
contains
subroutine show_progress(p)
real,intent(in)::p
integer :: i
integer :: n = 60
real ::r
character(3) :: persent
write(persent,'(i0)') int(p*100)
write(*,'(a)',advance='no') achar(13)//' ['
do i=1,60
r = real(i-1)/real(N-1)
if(r<=p) then
write(*,'(1a)',advance='no') '='
else
write(*,'(1a)',advance='no') ' '
endif
end do
write(*,'(a)',advance='no') '] '//trim(persent)//' %'
end subroutine show_progress
end program learn_show_progress
近期评论