如何用fortran77在一行中写入格式化的矩阵?

时间:2016-06-07 12:07:25

标签: fortran output fortran77

假设我有矩阵c(i,j)。我想用最旧的Fortran77语言在屏幕上用逗号写下三个符号。我写了

         do i=1,N
         write(*,"(F8.3)") ( c(i,j), j=1,N )
         end do

但输出格式为

C(1,1)

C(1,2)

...

c(1,10)c(2,1)

C(2,2)

...

最后,我可以简单地写一下

         do i=1,N
         write(*,*) ( c(i,j), j=1,N )
         end do

然后输出就像矩阵,但是,当然,它没有格式化。

如何在Fortran77中获得正确的输出?

编辑。似乎解决方案之一就是编写

   do i=1, N
   do j=1, N
    write(*,'(F9.3,A,$)') c(i,j), ' '
   end do
    write(*,*) ' '
   end do

1 个答案:

答案 0 :(得分:2)

您的格式只指定一个浮点数,但实际上您想要每行写N

这个简单案例的一个相当普遍的解决方案就像是

  program temp
  implicit none
  integer, parameter :: N=3
  real, dimension(N,N) :: c
  integer :: i,j
  character(len=20) :: exFmt
  c = 1.0
  write(exFmt,'("(",I0,"(F8.3))")') N
  do i=1,N
     write(*,exFmt) (c(i,j), j=1,N)
  end do
  end program

这会使exFmt成为'(3(F8.3))',它指定打印三个浮点数(请注意,您可能真的希望'(3(F8.3," "))'明确包含一些空格。)

请注意,某些编译器允许exFmt只是'(*(F8.3))'。这是fortran 2008规范的一部分,因此您可以访问的所有编译器都可能不提供。有关编译器支持的摘要,请参阅here(请参阅无限格式项,感谢HighPerformanceMark)

最后一个简单的方法是使用像'(1000(F8.3))'这样的格式声明,其中1000比你需要的大。