主题:[讨论]关于格式化输出问题
hrhktkbzyy
[专家分:10] 发布于 2010-04-14 18:02:00
初学Fortran,请教各位前辈一个问题,就是我想在屏幕或文件中的[color=FF0000]同一行格式化输出[/color]动态数组数据,数组的维数是自定的,怎么实现呢?
比如,数组对于a(:),目前我的方法是:
real,allocatable :: a(:)
integer :: n,i
read(*,*)n
write(*,'(8(f6.3,1X))')(a(i),i=1,n)
问题是对于可变的n,8(f6.3,1X)前面的数字怎么确定呢?所以请教一下有没有解决这个问题的方法。
回复列表 (共4个回复)
沙发
elderQ [专家分:70] 发布于 2010-04-14 19:04:00
real,allocatable :: a(:)
integer :: n,i
read(*,*)n
ALLOCATE(a(n))
write(*,'(8(f6.3,1X))')(a(i),i=1,n)
这样不就行了么?
板凳
asymptotic [专家分:16630] 发布于 2010-04-14 22:37:00
这个也许可以满足你的要求,对于不同的 n 值,需要少许改动。
program main
implicit none
character(len = 30):: fmt_str
real, allocatable :: a(:)
integer :: n, i
read(*, *) n
fmt_str = "(??(f6.3,1X))"
write(fmt_str(2 : 3), "(I2)") n
write(*, fmt_str) a(1 : n)
stop
end program main
3 楼
hrhktkbzyy [专家分:10] 发布于 2010-04-15 00:17:00
write(*,'(8(f6.3,1X))')(a(i),i=1,n)
中的8是我给定的,不能变化,如果动态数组有10个元素就不好用了
4 楼
hrhktkbzyy [专家分:10] 发布于 2010-04-15 00:19:00
[quote]这个也许可以满足你的要求,对于不同的 n 值,需要少许改动。
program main
implicit none
character(len = 30):: fmt_str
real, allocatable :: a(:)
integer :: n, i
read(*, *) n
fmt_str = "(??(f6.3,1X))"
write(fmt_str(2 : 3), "(I2)") n
write(*, fmt_str) a(1 : n)
stop
end program main[/quote]
谢谢!
我来回复