Arrays Fortran文件结束错误

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 =

我正在学习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 = ', 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行?