麦田守望者 发表于 2014-4-28 21:38:10

格式化输出问题

subroutine output(matrix)
implicit none
integer::m,n
integer::i
real::matrix(:,:)
character(len=20)::for='(??(1x,f6.3))'
m=size(matrix,1)
n=size(matrix,2)
write(for(2:3),'(I2)')n
do i=1,n
   write(*,fmt=for)matrix(i,:)
end do
return
end subroutine output
这个个格式输出见得不多啊,write(for(2:3),‘(i2)’),for(2:3)是啥意思啊?这里为什么要这么用呢?还有后面一句write(*,fmt=for)matrix(i,:),这个也没看懂,n到底是行号还是列号?求大神指点,详细见彭国伦书P448

楚香饭 发表于 2014-4-28 22:12:00

for 是字符串,值是 '(??(1x,f6.3))'
for(2:3) 表示子字符串,从第二个字符到第三个字符。即 ??

write( for(2:3) 是把上述的两个问号替换为 n 的值。比如 n = 30,则替换后,for 的值为 '(30(1x,f6.3))'

write( * , fmt=for) matrix(i,:)
等效于
write( * , for ) matrix(i,:)

根据上面的假设,则等效于
write(*,100) matrix(i,:)
100 format(30(1x,f6.3))

n是第二维,你说他是行也行,是列也行。(看你自己的规定)

麦田守望者 发表于 2014-4-29 22:36:44

chuxf 发表于 2014-4-28 22:12
for 是字符串,值是 '(??(1x,f6.3))'
for(2:3) 表示子字符串,从第二个字符到第三个字符。即 ??



谢谢啊,说的这么详细
页: [1]
查看完整版本: 格式化输出问题