检查fortran读取语句中的输入类型

时间:2014-02-27 16:03:06

标签: fortran

我在输入中输入了一个检查错误:

integer :: lsp 
chksp:do 
write(*,*) "#Enter Number" 
read(*,*,iostat=istat)lsp 
if (istat==0) then 
  exit chksp 
else 
  write(*,*)"Number can only be integer. Re-enter!" 
end if 
end do chksp 

问题是,如果enteres中的字符值而不是数值,它可以检测到错误;但如果输入实数值,则无法检测错误,而不是整数。

任何方法强制它只检测整数?

注意:ifort可能有问题; gfortran对代码感到满意。

2 个答案:

答案 0 :(得分:4)

您可以指定请求整数的格式:

program enter_int
  implicit none
  integer       :: ierror, intVal

  do
    write(*,*) "Enter an integer number"
    read(*,'(i10)',iostat=ierror) intval

    if ( ierror == 0 ) then
      exit
    endif
    write(*,*) 'An error occured - please try again'

  enddo

  write(*,*) 'I got: ', intVal
end program

然后,提供浮动失败。

答案 1 :(得分:1)

如下所示?

    ian@ian-pc:~/test/stackoverflow$ cat read.f90
Program readit

  Integer :: val
  Integer :: iostat

  val = -9999

  Do

     Read( *, '( i20 )', iostat = iostat ) val

     If( iostat == 0 ) Then
        Write( *, * ) 'val = ', val
     Else
        Write( *, * ) 'oh dear!!'
     End If

  End Do

End Program readit
ian@ian-pc:~/test/stackoverflow$ nagfor -o read read.f90
NAG Fortran Compiler Release 5.3.1(907)
[NAG Fortran Compiler normal termination]
ian@ian-pc:~/test/stackoverflow$ ./read
10
 val =  10
10.0
 oh dear!!
safs
 oh dear!!
123dfs23
 oh dear!!
^C
ian@ian-pc:~/test/stackoverflow$ gfortran -o read read.f90
ian@ian-pc:~/test/stackoverflow$ ./read
10
 val =           10
10.0
 oh dear!!
dsfs
 oh dear!!
^C
ian@ian-pc:~/test/stackoverflow$