Arrays Fortran文件结束错误
我正在学习Fortran,目前正在fortrantutorials.com上做这个练习。我必须运行以下代码:Arrays Fortran文件结束错误,arrays,input,io,fortran,Arrays,Input,Io,Fortran,我正在学习Fortran,目前正在fortrantutorials.com上做这个练习。我必须运行以下代码: program magic implicit none real, dimension(100) :: a,b,c,d open(10, file='data.txt') read(10,*) a b = a*10 c = b-a d = 1 print*, 'a = ', a print*, 'b = ', b print*, 'c =
program magic
implicit none
real, dimension(100) :: a,b,c,d
open(10, file='data.txt')
read(10,*) a
b = a*10
c = b-a
d = 1
print*, 'a = ', a
print*, 'b = ', b
print*, 'c = ', c
print*, 'd = ', d
end program magic
它读取以下data.txt文件:
24
45
67
89
12
99
33
68
37
11
当我运行它时,它会显示以下错误:
At line 6 of file test.f95 (unit = 10, file = 'data.txt')
Fortran runtime error: End of file
[Finished in 0.0s with exit code 2]
第6行引用了下面的一行,我仔细检查了“data.txt”和我的fortran文件是否确实在同一个目录中:
read(10,*) a
我能做些什么来解决这个问题?提前谢谢
read(10,*) a
尝试读取100个数字,因为a
的大小为100
real, dimension(100) :: a
您的文件不包含100个数字,因此在到达文件末尾时会崩溃
只需阅读编译器告诉您的信息:
“Fortran运行时错误:文件结束”
尝试读取100个数字,因为a
的大小为100
real, dimension(100) :: a
您的文件不包含100个数字,因此在到达文件末尾时会崩溃
只需阅读编译器告诉您的信息:
“Fortran运行时错误:文件结束”
如果将IOSTAT=
添加到读取中,它将设置该变量而不是崩溃:
integer :: IOSTAT
CHARACTER*(128) :: IOMSG
open(10, file='data.txt')
read(10,*,IOSTAT=IOSTAT,IOMSG=IOMSG) a
IF ( IOSTAT .NE. 0 ) THEN
WRITE(*,*) "WARNING: Read failed with message '", TRIM(IOMSG), "'"
END IF
不要相信这样失败的READ语句的结果。如果在READ中添加IOSTAT=
,它将设置该变量而不是崩溃:
integer :: IOSTAT
CHARACTER*(128) :: IOMSG
open(10, file='data.txt')
read(10,*,IOSTAT=IOSTAT,IOMSG=IOMSG) a
IF ( IOSTAT .NE. 0 ) THEN
WRITE(*,*) "WARNING: Read failed with message '", TRIM(IOMSG), "'"
END IF
不要相信读语句失败的结果。data.txt是否(至少)有100行?data.txt是否(至少)有100行?