首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran77用户输入验证

Fortran77用户输入验证
EN

Stack Overflow用户
提问于 2014-09-21 22:17:10
回答 2查看 322关注 0票数 1

我需要用户只输入实数时,提示。应该显示错误信息,程序应该停止,以防用户输入字符或任何其他符号。我怎么才能在77号佛特兰做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 08:23:47

我认为,您可能希望进行更多的尝试,因为您的问题中包含的是编译器自动完成的操作。

您可以使用IOSTAT=ERR=说明符。

代码语言:javascript
复制
   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

代码语言:javascript
复制
   GOTO 10
20 PRINT *,"Wrong input, try again."
10 READ(*,*,ERR=20) X
票数 0
EN

Stack Overflow用户

发布于 2014-09-22 12:50:02

稍微改进一下用户界面,我喜欢读取一个字符串,然后对内部读取做错误检查:

代码语言:javascript
复制
    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的值将保持不变(但可能依赖于系统/编译器!),因此您可以这样做:

代码语言:javascript
复制
     x=-999999.   
     read(instring,*,iostat=ie)x
     if(ie.eq.0.and.x.eq.-999999.)then
            .. code to handle error..
     endif

您可以交替使用index查找坏角色。在我的系统中,十进制.本身被取为零。处理起来有点麻烦,但是可以通过解析instring来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25964441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档