我试图动态地制作输出格式,因为要打印的变量数量可以动态变化。我用以下两种方法做了一些实验(参见下面的上下文),但是它们都导致了这样的错误信息:
forrtl:error(63):输出转换错误,单元1016,文件/ panfs / roc / Node_ 16.txt
第一种方法使用字符串来指定输出格式,例如
real a(4) = [1 2 3 4]
int size = 4
write(string,'(a,i3,a)') '(a,',size,'(f9.4))'
write(*, string) a(:)
第二种方法是我刚从互联网上学到的,它只占用一行,但它也没有用:
write(*,'(a,<size>f9.4)') a(:)
请帮我这个格式设置。感谢。
编辑:我找到了问题的罪魁祸首。在我的真实项目中,数组的一些元素&#34; a&#34;是非常巨大的,因此f9.4不适合显示完整的数组。为了解决这个问题,我将f9.4替换为e11.3之类的东西。答案 0 :(得分:3)
Fortran最近添加了*
作为无限格式转发器。例如,'( *(2X, F3.1) )'
这比动态格式更容易使用。
答案 1 :(得分:1)
您不需要提供确切数量的值,表示更多可以。通常的方法是使用足够大的值,比如
'(a,999f9.4)'
在Fortran 2008中,您可以使用M.S.B中的功能。显示*999(f9.4)
。
如果出于某些其他目的需要动态字符串,请使用连接运算符//
。