我需要用户只输入实数时,提示。应该显示错误信息,程序应该停止,以防用户输入字符或任何其他符号。我怎么才能在77号佛特兰做到这一点。
发布于 2014-09-22 08:23:47
我认为,您可能希望进行更多的尝试,因为您的问题中包含的是编译器自动完成的操作。
您可以使用IOSTAT=或ERR=说明符。
INTEGER IE
DO I = 1, MAX
READ(*,*,IOSTAT=IE) X
IF (IE.eq.0) GOTO 10
PRINT *,"Wrong input, try again."
END DO
10 CONTINUE或
GOTO 10
20 PRINT *,"Wrong input, try again."
10 READ(*,*,ERR=20) X发布于 2014-09-22 12:50:02
稍微改进一下用户界面,我喜欢读取一个字符串,然后对内部读取做错误检查:
character insting*80
ie=1
do while(ie.ne.0)
read(*,'(a)')instring
if(instring(1:1).eq.'q')stop
read(instring,*,iostat=ie)x
if(ie.ne.0)then
write(*,*)'invalid input ',trim(instring),' is not a real number'
endif
enddo(注意,trim不是f77,但它很容易复制(如果需要)
请注意,通过一些努力,您可以处理病理病例。前导“/”或“,”不会抛出错误,但x的值将保持不变(但可能依赖于系统/编译器!),因此您可以这样做:
x=-999999.
read(instring,*,iostat=ie)x
if(ie.eq.0.and.x.eq.-999999.)then
.. code to handle error..
endif您可以交替使用index查找坏角色。在我的系统中,十进制.本身被取为零。处理起来有点麻烦,但是可以通过解析instring来完成。
https://stackoverflow.com/questions/25964441
复制相似问题