我试图了解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文件的第5行(unit = 10,file =' test.txt') 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
当我这样做时,程序运行成功。但是,print命令显示" 2 0 1 -1",这是错误的,因为test.txt文件包含" 1,2,3"。
我试过在这里和那里调整一些东西,但没有好处。我试图做一些(我认为)应该非常简单的事情:从.txt文件中读取整数列表。任何关于我做错事的帮助都会非常感激。
答案 0 :(得分:2)
我认为您的问题与text.txt
文件有关,而不是与Fortran代码有关。尝试在其中添加行尾字符(输入)。我已经使用gfortran 5.4成功运行了原始代码。
有关详细信息,请参阅this相关帖子。
答案 1 :(得分:0)
您的程序正在做正确的事情。只需测试iostat即可防止程序崩溃。如果到达文件末尾,则IOstatus设置为负数(在这种情况下为-1)。如果发生读取错误,IOstatus设置为正数,这种情况在您的情况下没有发生。因此,您的打印语句以-1结尾,这是正确的。