将 Fortran 2D 数组打印为矩阵

Sun*_*nny 4 fortran

我有一个当前为 3x3 的数组。当我打印出字符时,我会以环绕线样式打印结果。我希望在一行上打印一个更具可读性的方阵,而不是 XXXXXXXXXXXXX。是否可以使用 do 循环?

我有以下几点:

CHARACTER(len=1) :: Grid(2,2)
Grid = "*"
Print *, Grid
Run Code Online (Sandbox Code Playgroud)

Kin*_*ing 5

根据您想要的输出格式,您不一定需要 do-loop,这是最简单的:

program simple
    implicit none
    CHARACTER(len=1) :: Grid(2,2)
    Grid = reshape( ["1","2","3","4"] , shape=shape(Grid) )
    write( * , "(A)" ) Grid
end program simple
Run Code Online (Sandbox Code Playgroud)

带有reshape,的行使用 Fortran >2003 数组构造函数语法[]。因此,请确保您的编译器设置已设置为 Fortran 2008 标准。否则,只需替换[]为旧的数组构造函数语法(//)

如果您希望每一行都打印在不同的行上,那么循环是必要的,至少是一个隐含的 do-loop

program simple
    implicit none
    integer :: i,j
    integer, parameter :: n=2
    CHARACTER(len=1) :: Grid(n,n)
    Grid = reshape( ["1","2","3","4"] , shape=shape(Grid) )
    write( * , "(*(g0))" ) ( (Grid(i,j)," ",j=1,n), new_line("A"), i=1,n )
end program simple
Run Code Online (Sandbox Code Playgroud)

我相信,上面的版本在将非传染性数组部分Grid(i,:)打印到输出之前避免了编译器创建的不必要的临时数组来存储非传染性数组部分。该g0编辑描述符是Fortran的2008年的一个方便的功能所以一定要确保你的编译器支持的Fortran 2008标准。