如何消除Fortran打印输出中不需要的间距?

时间:2015-07-05 23:07:13

标签: format fortran output fortran90

这可能看起来像一个微不足道的问题,但我通过谷歌搜索找不到任何答案。我有这个小程序:

Program Test_spacing_print
  Integer:: N
  Real:: A,B

  N=4; A=1.0; B=100.0

  print*,'N =',N

  print*,'A =',A,' B =',B
  print '(2(A3,F8.2,1X))' ,'A =',A,' B =',B
  print 20, A,B
  20 format('A =',F8.2,x,'B =',F8.2)

End Program Test_spacing_print

给了我输出:

     N =           4
 A =   1.00000000      B =   100.000000
A =    1.00  B   100.00
A =    1.00 B =  100.00

我希望摆脱=符号后不需要的空间,即我想要的输出看起来像=之后的1个空格:

 N = 4
 A = 1.00000000 B = 100.000000
 A = 1.00 B = 100.00
 A = 1.00 B = 100.00

有没有可能在fortran?

1 个答案:

答案 0 :(得分:3)

您说输出中有“不需要的”空间,但您确实拥有指定显式格式所要求的空间。当您没有提供格式时,列表导向输出意味着您对间距没有发言权。

要输出A,您将拥有编辑描述符F8.2:字段宽度将为8.小数点后面的两位数字和小数点本身会为您提供五位数字(并且在小数点之前签字。因此,对于没有打印可选符号的A1.,您将有四个空白。

就像Fortran 95引入I0 edit descriptor一样,它允许F0.d。 [对于其他描述符,虽然后来添加了G0.d。] F0.2将提供最小字段宽度,小数点后面的这两位数,这就是你想要的。但请注意,您需要在=符号后明确添加空白:

print '("N = ", I0)', N
print '(2(A4,F0.2,:,1X))' ,'A = ',A,'B = ',B

[我还使用了:编辑描述符来避免尾随空白。]

如果你想要一个真正的Fortran 90答案,就像你标记的一样,那么它就不会那么好但是它仍然可以完成。