我有一个需要一个数字的 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 种选择。
read(*,*,err=1234)
的内容。哪里1234
是错误处理语句的标签。这种方法现在被认为是过时的,可能会令人不悦。 read(*,*,iostat=ios)
的内容。哪里ios
是一个整数变量,它捕获 iostat
(i/o 状态标志)由 read
报告陈述。然后你可以写这行 if (iostat/=0) ...
用于错误处理。这被认为是最新的方法。 关于fortran - 当输入字符而不是数字时防止 FORTRAN 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145774/