File io 无法将阵列的后续行打印到文件

File io 无法将阵列的后续行打印到文件,file-io,fortran,fortran90,File Io,Fortran,Fortran90,我正在尝试编写一段基本的代码来打印一个名为“arr”的50*50数组。不幸的是,到目前为止它只打印数组的第一行,尽管该行的格式是正确的。我附上了下面的代码,想知道是否有人能指出我哪里出了问题?谢谢大家! program testing implicit none integer :: i, j integer, dimension (1:50, 1:50) :: arr arr = 1 do i=1,50 open(unit=6, file= "array.txt", action=

我正在尝试编写一段基本的代码来打印一个名为“arr”的50*50数组。不幸的是,到目前为止它只打印数组的第一行,尽管该行的格式是正确的。我附上了下面的代码,想知道是否有人能指出我哪里出了问题?谢谢大家!

program testing

implicit none

integer :: i, j
integer, dimension (1:50, 1:50) :: arr

arr = 1

do i=1,50
  open(unit=6, file= "array.txt", action="write")
  write(6, '(2500I3)') (arr(i,j), j=1,50)
  close(6)
end do

end program testing

您的open语句位于循环内(以及匹配的close语句)。这意味着对于数组中的每一行,都要打开文件。那可能不是你想做的

如果没有位置说明符,则OPEN语句的默认位置说明符为“ASIS”。对于已经存在的文件(第一次迭代后的案例,甚至第一次迭代后的案例),这意味着位置未指定。您的处理器可能会将其作为文件的开始。这意味着循环的每一次迭代都会一次又一次地覆盖第一条记录

如果必须在每次迭代中打开文件,则在执行open语句时,使用POSITION='APPEND'说明符将文件定位在末尾。否则,将open和close语句移出循环


(默认“ASIS”的行为方式意味着您在为现有“磁盘上”文件执行OPEN语句时,应始终通过位置说明符指定文件的初始位置。)

IanH的回答是正确的。您的程序可以按如下方式修复。请注意,输出单位应该参数化,而不是设置为6,并且可以如图所示编写数组和数组节

program testing

implicit none

integer :: i
integer, dimension (1:50, 1:50) :: arr
integer, parameter :: outu = 20 ! better to parameterize unit and 
                                ! not to use the number 6, which most compilers
                                ! use for standard output

arr = 1
open(unit=outu, file= "array.txt", action="write")
do i=1,50
  write(outu, '(2500I3)') arr(i,:) ! can write array section without implied do loop
end do
close(outu)
end program testing

如果编译器支持Fortran 2008的这一功能,那么最好使用NEWUNIT让运行时找到一个空闲的单元号:
integer::outu
open(NEWUNIT=outu,file=…