我是否正确理解了 fortran 格式?

Have I understood the fortran FORMAT properly?

我正在尝试编译别人的代码,但我不习惯使用 Fortran。尝试编译时出现错误

ForceToForce.f90:119.34:

     99 FORMAT(3(F15.10),X,3I)
                              1
Error: Nonnegative width required in format string at (1)
ForceToForce.f90:120.37:

     111 FORMAT(4(F15.10),X,2(3I))
                                 1
Error: Nonnegative width required in format string at (1)
ForceToForce.f90:153.60:

                       WRITE(399999,FMT=111)QPCOM(i,1),QPCOM(i
                                                        1
Error: FORMAT label 111 at (1) not defined

我做了一些研究,我知道你需要在 I 后面放一个整数来确定使用的位置数。所以我将行更改为

111 FORMAT(4(F15.10),X,2(I3))

并且代码符合要求,但给我一个分段错误。因为这是我唯一改变的地方,所以我想我一定误解了 FORMAT 应该如何使用。还有什么我应该尝试的吗?

不,那是错误的。 2(3I) 指定六个整数。 2(I3) 是两个整数,每个整数的宽度为 3 个字符。

Fortran 标准要求为 I 编辑描述符指定非负宽度,如错误消息中明确所述。参见Error: Nonnegative width required in format string at (1)以前的代码很可能是Intel Fortran编译的,并没有严格执行这个限制。

所以,你的解决方案是错误的。您可以使用 3I0 并且应该没问题,并且行为可能会保持完全相同。