fortran - 当输入字符而不是数字时防止 FORTRAN 关闭

标签 fortran gfortran

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

program test
integer var
read(*,*) var
end

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

我在想这样的事情:
    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

那会是什么 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

特别鸣谢 User7391谁花了精力编写所有这些代码!

最佳答案

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

  • 正如@User7391 的回答已经说过的那样,您可以将输入读入字符变量并自己解析。那种用户甚至愿意为您编写代码!
  • 您可以将读取命令修改为类似 read(*,*,err=1234) 的内容。哪里1234是错误处理语句的标签。这种方法现在被认为是过时的,可能会令人不悦。
  • 您可以将读取命令修改为类似 read(*,*,iostat=ios) 的内容。哪里ios是一个整数变量,它捕获 iostat (i/o 状态标志)由 read 报告陈述。然后你可以写这行 if (iostat/=0) ...用于错误处理。这被认为是最新的方法。
  • 关于fortran - 当输入字符而不是数字时防止 FORTRAN 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145774/

    相关文章:

    compiler-errors - 嵌套函数: Error: CONTAINS statement at (1) is already in a contained program unit

    c - 接口(interface) C 函数与 Fortran 中的结构

    linux - 如何调试 "Program received signal SIGSEGV: Segmentation fault"的错误

    Fortran 相当于 C++ 纯虚方法

    c++ - 使用 COMMON 语句编译 C++(包括 Fortran 库)

    fortran - 无法通过 Homebrew 软件安装 gfortran

    Fortran 接口(interface)本身会产生恼人的错误

    fortran - 如何在 Fortran 中实现数组结构而不是结构数组?

    fortran - Fortran 中的字符串 : Portable LEN_TRIM and LNBLNK?

    gcc - Fortran #define 多行宏定义