2016-03-24 16 views
1
numaralı terminalden giriş

iostat'un kullanımını anlıyorum, terminalden giriş yaptığımızda, programın giriş sonuna ulaşıldığını anlayabilmesi için io<0 durumunu nasıl yapabilirim? Basit bir kodiostat ve

Örneğin

ortalama bulmak için:

program mean 
implicit none 
real :: x 
real :: gmean, amean, hmean 
real :: summ,pro,invsum 
integer :: i, valid 
integer :: io, countt 

countt=0 
valid=0 
summ=0 
pro=1 
invsum=0 

do 
    read(*,*,iostat=io) x 
    if (io<0) exit 
    countt=countt+1 
    if (io>0) then 
     write(*,*) 'error in input..try again !!!' 
    else 
     write(*,*) 'Input data #.',countt,':',x 
     if (x<=0) then 
      write(*,*) 'input <=0..ignored !!' 
     else 
      valid = valid + 1 
      summ = summ + x 
      pro = pro*x 
      invsum = invsum + (1.0/x) 
     end if 
    end if 
end do 
if (valid>0) then 
    amean=summ/valid 
    gmean = pro**(1.0/valid) 
    hmean=valid/invsum 

    write(*,*) 'number of valid items --->',valid 
    write(*,*) 'arithmetic mean --> ',amean 
    write(*,*) 'geometric mean --> ',gmean 
    write(*,*) 'harmonic mean --> ',hmean 
else 
    write(*,*) 'no valid inputs !!' 
end if 
end program mean 

Ben girdiler soran devam ediyor dışında kod her şey çalışıyor çalıştırdığınızda. io<0'u nasıl yapacağımı anlamıyorum. Dosyanın sonuna sinyal d - Linux ve MAC OS Unix sistemlerinde

cevap

1

, sen Ctrl kullanabilirsiniz.

Windows üzerinde

kullanımı Ctrl - z (here itibaren).

Bu Wikipedia article, çeşitli işletim sistemlerinde başka komut satırı kısayollarını karşılaştırır. girişler bir dosyada ise

+0

ohh .... dan ama nasıl çalışır? – ss1729

+1

@ ss1729 Sadece satır başına giriş sağlar. Dosya sonu sinyali, dosyanın sonunda, sinyaldir :) –

1

Ben kullanıcıya güzel olmak ister (onun bana .. bile)

character*80 input 
real val 
integer stat 
input='' 
do while(input.ne.'e') 
write(*,'(a)',advance='no')'enter val [e to end]: ' 
read(*,'(a)',iostat=stat)input !iostat here to catch ^d and such 
if(stat.ne.0)input='e' 
if(input.ne.'e')then 
    read(input,*,iostat=stat)val !check iostat here 
           !in case user entered some 
    if(stat.ne.0)then    !other non-number 
    write(*,*)val 
    else 
    write(*,*)'expected a number' 
    endif 
endif 
enddo 
end