假设我有矩阵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
答案 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比你需要的大。