【发布时间】:2018-02-25 03:38:32
【问题描述】:
我试图了解 READ 语句在 Fortran 中的工作原理。为此,我编写了以下简单程序:
program main
integer a,b,c
open(unit=10,file='test.txt',status='old')
read(10,*)a,b,c
print*,a,b,c
close(10)
end program main
我在终端上运行它(使用 Mac):gfortran Main.f95;打开a.out
我收到以下错误:在文件 Main.f95 (unit = 10, file = 'test.txt') 的第 5 行 Fortran 运行时错误:文件结束
我在网上寻找解决方案,并提出在 READ 说明符中添加 IOSTAT=... 的建议,如下所示:
program main
integer a,b,c,IOstatus
open(unit=10,file='test.txt',status='old')
read(10,*,IOstat=IOstatus)a,b,c
print*,a,b,c,IOstatus
close(10)
end program main
当我这样做时,程序运行成功。但是,打印命令显示“2 0 1 -1”,这是错误的,因为 test.txt 文件包含“1,2,3”。
我试过在这里和那里调整一些东西,但没有用。我正在尝试做一些(我认为)应该非常简单的事情:从 .txt 文件中读取整数列表。任何关于我做错了什么的帮助将不胜感激。
【问题讨论】:
-
您使用的是什么编译器版本?我可以使用 gfortran 5.4 成功运行您的初始代码
-
如您所见,
iostat在这里为您所做的一切都是抑制非常清晰的错误消息,而是给您一个整数标志-1,指示某种读取错误。 -
您确定您的文本文件实际上是文本文件吗?你用什么编辑器?
-
将此评论视为最佳实践的旁注:始终使用
implicit none。声明变量时,双冒号是可选的,但很常见 (integer :: a,b,c)。如果您声明具有某种属性的变量/类型,则需要::(integer, dimension(:), allocatable :: a)。 -
我使用 TextEdit 创建了文本文件。在 Finder 上,文件类型显示为“纯文本”。另外,我添加了“隐式无”,但我仍然收到相同的错误消息。我的 gfortran 版本是 6.3。