簡體   English   中英

Fortran77用戶輸入驗證

[英]Fortran77 User Input Validation

提示時,我只需要用戶輸入實數。 如果用戶輸入一個字符或任何其他符號,應顯示一條錯誤消息並停止程序。 我該如何在fortran 77中執行此操作。

我假設,您可能想嘗試更多,因為問題中的內容是編譯器自動執行的。

您可以使用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

稍微改善用戶界面,我喜歡讀取一個字符串,然后對內部讀取進行錯誤檢查:

    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 btw,但是如果需要的話,可以輕松復制)

請注意,您可以通過一些努力來處理病理病例。 前導'/'或','不會引發錯誤,但x的值保持不變(不過可能取決於系統/編譯器!),因此您可以執行以下操作:

     x=-999999.   
     read(instring,*,iostat=ie)x
     if(ie.eq.0.and.x.eq.-999999.)then
            .. code to handle error..
     endif

您可以選擇使用index查找不良字符。 在我的系統上,十進制. 本身被視為零。 處理起來有點麻煩,但是可以通過解析instring來完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM