[英]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.