我需要用戶在出現提示時只輸入實數。如果用戶輸入字符或任何其他符號,則應顯示錯誤消息並停止程序。我如何在Fortran 77中做到這一點。Fortran77用戶輸入驗證
回答
我認爲,您可能想要嘗試更多嘗試,因爲您的問題在編譯器中會自動執行。可以使用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順便說一句,但它很容易複製,如果需要)
請注意,有一些努力,你可以處理pathalogic案例。領先「/」或「」沒有拋出錯誤,但葉X不變(可能是系統/編譯器相關的但是!)的值,這樣你就可以做這樣的事情:
x=-999999.
read(instring,*,iostat=ie)x
if(ie.eq.0.and.x.eq.-999999.)then
.. code to handle error..
endif
你可以交替使用index
來尋找壞人物。在我的系統上,十進制.
本身被視爲零。這有點麻煩,但可以通過解析instring
用輸入',ListDirectedInputCanBeEvil'試試你的程序,它通常不被認爲是有效的真實文本。 – IanH 2014-09-22 13:14:02
@IanH你建議哪種格式優雅地處理用戶鍵入整數的情況? – agentp 2014-09-22 14:44:28
任何數字編輯描述符,可用於實數輸入(F,E,D,G),其描述符的小數部分爲.0,字段寬度指定與輸入的字段寬度匹配,假定解釋整數字面是一個真正的「優美」。但是,如果您確實想驗證輸入文本是否匹配某種特定的「真實文字樣」模式,那麼您幾乎必須自己做這件事 - 對Fortran處理器檢測「不良」輸入沒有任何要求。 – IanH 2014-09-22 22:54:58
- 1. 在用戶輸入驗證 - Grails驗證
- 2. Javascript驗證用戶輸入
- 3. Javascript用戶輸入驗證
- 4. 驗證用戶輸入Monotouch
- 5. 驗證用戶輸入
- 6. 驗證用戶輸入C#
- 7. 驗證用戶輸入?
- 8. 驗證用戶輸入
- 9. 驗證用戶輸入
- 10. 用戶輸入值驗證
- 11. 驗證用戶輸入
- 12. 驗證用戶輸入或
- 13. scanf驗證用戶輸入
- 14. 輸入和用戶輸入驗證
- 15. Android驗證輸入,而用戶輸入
- 16. 客戶端輸入驗證
- 17. 用循環驗證用戶輸入
- 18. 使用JavaScript驗證用戶輸入
- 19. 使用php驗證用戶輸入
- 20. 使用Try/Parse驗證用戶輸入?
- 21. Java SWT用戶輸入驗證
- 22. 循環驗證用戶輸入
- 23. 用戶輸入 - 數據驗證
- 24. 驗證用戶輸入的短語Java
- 25. 在QTableView驗證用戶輸入
- 26. 驗證文件名的用戶輸入
- 27. int長度的用戶輸入驗證
- 28. 字符串用戶輸入驗證
- 29. WinForms中的用戶輸入驗證
- 30. Hang子手用戶輸入驗證
如果您關心錯誤,請不要使用列表控制輸入。編譯器沒有義務通過iostat報告「不良」輸入。唯一健壯和便攜的方法是自己滾動驗證。 – IanH 2014-09-22 10:15:53
我不能同意。從單個記錄來看,它是相當好的。 – 2014-09-22 10:17:32
輸入斜線作爲輸入。走着瞧吧。 – IanH 2014-09-22 10:18:02