假设我有矩阵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发布于 2016-06-07 14:30:31
您的格式只指定一个浮点,但实际上希望每行编写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规范的一部分,所以您可以访问的所有编译器都不能提供该规范。有关编译器支持的摘要,请参见这里 (请参阅无限格式项,这要感谢HighPerformanceMark )。
最后,一个简单的方法是使用像'(1000(F8.3))'这样的格式状态,其中1000比你所需要的要大。
https://stackoverflow.com/questions/37678950
复制相似问题