Fortran Coder

标题: 格式化输出问题 [打印本页]

作者: 麦田守望者    时间: 2014-4-28 21:38
标题: 格式化输出问题
[Fortran] 纯文本查看 复制代码
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
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
chuxf 发表于 2014-4-28 22:12
for 是字符串,值是 '(??(1x,f6.3))'
for(2:3) 表示子字符串,从第二个字符到第三个字符。即 ??

谢谢啊,说的这么详细




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2