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

2024-06-22

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

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

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

我在想这样的事情:

    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

那会是什么变量非数字状况是什么样的? 我用gfortran在Ubuntu下编译。


Edit: 谢谢你们!我最终实现了 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 个选择。

  1. 正如 @User7391 的答案已经说过的那样,您可以将输入读入字符变量并自行解析。这位好心的用户甚至主动提出为您编写代码!
  2. 您可以将读取命令修改为类似的内容read(*,*,err=1234) where 1234是错误处理语句的标签。这种方法现在被认为是相当过时的,可能会令人不悦。
  3. 您可以将读取命令修改为类似的内容read(*,*,iostat=ios) where ios是一个整型变量,它捕获iostat(i/o 状态标志)由read陈述。然后你可以写下这一行if (iostat/=0) ...用于错误处理。这被认为是更新的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当输入字符而不是数字时,防止 FORTRAN 关闭 的相关文章

  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • 如何在 Fortran 90 中迭代包含数字、单词和空格的字符串?

    文件说明 STL文件由以下部分组成 solid
  • 如何将mortran代码转换为fortran代码

    我有一些 Mortran 代码 来自 glmnet 我想阅读和编译 我知道在编译时 Mortran首先转换为Fortran 然后编译 如果有预处理器的话 如何安装 Mortran 预处理器 特别是 OS X 上的 Mortran3 我在以下
  • 指定 gfortran 应该在其中查找模块的目录

    我目前基于模块来编译程序 例如主程序foo这取决于模块bar 如下 gfortran c bar f90 gfortran o foo exe foo f90 bar o 当foo f90 and bar f90位于同一目录中 如何指定 g
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • 如何在Fortran代码中将二维数组转换为一维数组?

    如何将 r i j 转换为一维数组以便可以轻松地对数字进行排序 program sort implicit none character CN 8 O 7 integer j iconf nconf integer i nbins t in
  • f951 错误:无法识别的命令行选项

    我在linux上 正在编译以下内容 mpif90 shared source F90 object1 o object2 o L some path Qoption link rpath some path I some path lhdf
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • 使用 Fortran 进行数组问题的二分查找

    我正在使用 Schaum 的 Fortran 77 编程概要 一书 其中有一个关于使用括号值组方法进行二分搜索的示例 首先这是代码 INTEGER X 100 INTEGER RANGE INTEGER START FINISH PRINT
  • MPI_Type_Create_Hindexed_Block 生成派生数据类型的错误范围

    使用Fortran 我尝试为动态分配的结构构建派生数据类型 但它得到了新类型的错误范围 代码如下 PROGRAM MAIN IMPLICIT NONE INCLUDE mpif h INTEGER I INTEGER MYID NUMPRO
  • Fortran 意图(inout)与省略意图

    良好的实践表明 Fortran 中的子例程参数每个都应具有指定的意图 即intent in intent out or intent inout 如上所述这个问题 https stackoverflow com questions 1011
  • Fortran90 中 BLAS 函数返回零

    我正在学习在Fortran90中使用BLAS 并使用子例程编写了一个简单的程序SAXPY https software intel com en us mkl developer reference fortran axpy和函数SNRM2
  • 派生类型数组:选择条目

    目前在我的代码中我有一个二维数组 integer allocatable elements 并定义一些常量 integer parameter TYP 1 integer parameter WIDTH 2 integer paramete
  • Fortran 子例程返回错误值

    嘿 我正在开发一个 Fortran 程序 遇到了一个奇怪的问题 当我尝试在调用特定子例程之前直接输出数组的某些值时 我得到了正确的值 然后 我尝试在启动子例程时输出同一数组的一些值 它们都是 0 我最终在子例程之后输出数组的值 并且这些值回
  • Fortran 读取语句中的“end”是什么意思?

    什么是end 这段代码片段的意思是什么 read portNum 100 end 900 readline 附 我已经尝试用谷歌找到这个 但没有运气 用户3600286 直接引用自this pdf http www tomzap com n
  • 如何在fortran中调用和使用另一个子程序中的子程序?

    我正在编写一个程序 其中主程序包含许多子例程和函数 为了构造主程序的这些子程序之一 假设是子程序 A 我需要使用另一个子程序 假设是 B 我的问题是 如何调用子程序A并使用子程序B 我是初学者 我已经搜索了很多 但没有找到我清楚理解的东西
  • 删除字符串中的空格

    我有以下代码 program main character len 15 abc te st tex t print trim abc end program main 哪个输出 te st tex t 我排除了所有要删除的空白 但事实并非
  • 如何在 Fortran 中实现数组结构而不是结构数组?

    我正在使用 Fortran 编写有关 CFD 主题的代码 在与一些计算机科学领域的朋友讨论后 他们告诉我 如果在他 她的代码中实现数组结构 SoA 而不是结构数组 AoS 可以加快计算时间 我见过很多关于这个主题的实现的例子 但大多数都是用
  • 接口不匹配 - 高阶函数

    我正在尝试在 Fortran 中 重现 高阶函数 module rk4 contains pure function f t x result fx real dimension 1 intent in x real intent in t
  • Fortran + Openmp 比顺序更慢

    我有这个 Fortran 语言的顺序代码 我的问题是 当我放置 Openmp 指令时 并行代码比顺序代码更慢 并且我没有看到错误 REAL DIMENSION ALLOCATABLE current next ALLOCATE curren

随机推荐