【问题标题】:Variable format变量格式
【发布时间】:2015-06-15 23:58:01
【问题描述】:

我写了一个程序来计算一个平方有限差分矩阵,你可以在其中输入行数(等于列数) -> 这存储在变量矩阵中。该程序运行良好:

program fin_diff_matrix

  implicit none

  integer, dimension(:,:), allocatable :: A     
  integer :: matrix,i,j

  print *,'Enter elements:'
  read *, matrix

  allocate(A(matrix,matrix))

  A = 0
  A(1,1) = 2
  A(1,2) = -1
  A(matrix,matrix) = 2
  A(matrix,matrix-1) = -1

  do j=2,matrix-1
    A(j,j-1) = -1
    A(j,j) = 2
    A(j,j+1) = -1
  end do

  print *, 'Matrix A: '
  write(*,1) A

  1 format(6i10)

end program fin_diff_matrix

对于输出,我希望该矩阵针对输出进行格式化,例如如果用户输入 6 行,输出也应如下所示:

         2        -1         0         0         0         0
        -1         2        -1         0         0         0
         0        -1         2        -1         0         0
         0         0        -1         2        -1         0
         0         0         0        -1         2        -1
         0         0         0         0        -1         2

格式的输出也应该是可变的,例如如果用户输入 10,则输出也应格式化为 10 列。网上的研究对带尖括号的格式语句给出了如下解决方案:

  1 format(<matrix>i<10)

如果我在 Linux 中使用 gfortran 编译,我总是在终端中收到以下错误:

       fin_diff_matrix.f95:37.12:

     1 format(<matrix>i10)
            1
   Error: Unexpected element '<' in format string at (1)
   fin_diff_matrix.f95:35.11:

     write(*,1) A
           1
   Error: FORMAT label 1 at (1) not defined

什么不起作用,我的错误是什么?

【问题讨论】:

  • 您不必在帖子上签名,您的姓名和图标会自动出现在帖子下方。尽量让你的问题简洁,直接进入你的问题。您通常也不应该在问题的标题中重复您的标签。

标签: format fortran output


【解决方案1】:

您尝试使用的语法是非标准的,它仅适用于某些编译器,我不鼓励使用它。

另外,永远忘记 FORMAT() 语句,它们已经过时了。

当你从几个部分自己构造它时,你可以在格式字符串中得到你自己的数字

character(80) :: form
form = '(          (i10,1x))'
write(form(2:11),'(i10)') matrix

write(*,form) A

您还可以在每行循环中编写矩阵,然后可以在 Fortran 2008 中使用任意大的计数或 *

do i = 1, matrix
  write(*,'(999(i10,1x))') A(:,i)
end do

do i = 1, matrix
  write(*,'(*(i10,1x))') A
end do

只需检查我是否无意中转置了矩阵。

【讨论】:

  • 你说得对,我在编辑时没有意识到我使用了很长的路是有原因的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2022-01-03
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2019-01-20
相关资源
最近更新 更多