防止FORTRAN在输入字符而不是数字时关闭

Gab*_*iel 3 fortran gfortran

我有一个read语句,需要一个非常简单的示例代码:

program test
integer var
read(*,*) var
end
Run Code Online (Sandbox Code Playgroud)

问题是我通常会因为分心而输入一串字符(即:).如何防止我的代码完全停止,而是显示您输入的值不正确的类型的错误消息.再试一次

我想的是:

    program test
    integer var
10  read(*,*) var
    if (var.not.a.number) then
      write(*,*)'You've entered an incorrect value. Try again'
      goto 10
    endif
    end
Run Code Online (Sandbox Code Playgroud)

会是什么var.not.a.number条件是什么样子?我gfortran用来在Ubuntu下编译.


编辑:谢谢大家!我最终实现了HPM的第三个选项,因为它是最简单的选项:

    program test
    integer var,iostat,ios
10  read(*,*,iostat=ios) var
    if (ios.ne.0) then
      write(*,*)'You've entered an incorrect value. Try again'
      goto 10
    endif
    end
Run Code Online (Sandbox Code Playgroud)

特别感谢User7391谁花了很多钱来编写所有代码!

Hig*_*ark 5

您正在使用列表导向的输入.*语句中的第二个read(*,*)基本上告诉编译器/运行时系统,你将在运行时为它提供一些可以解释为的东西integer.如果你想给自己输入错误的自由,你有(至少)3个选择.

  1. 正如@ User7391的回答所说,您可以将输入读入字符变量并自行解析.那个用户甚至提出为你编写代码!
  2. 你可以修改读命令类似read(*,*,err=1234)哪里1234是你的错误处理声明(S)的标签.这种方法现在被认为是相当老式的,可能不赞成.
  3. 你可以修改读命令类似read(*,*,iostat=ios),其中ios是一个整数变量,它抓住了iostat被报道(I/O状态标志)read声明.然后,您可以编写if (iostat/=0) ...用于错误处理的行.这被认为是更新的方法.