使用格式化的Fortran`write(6,*)`输出的问题

时间:2011-03-21 14:32:16

标签: fortran

我目前正在将应用程序从Fortran移植到C,需要输出一些变量来比较结果。我对Fortran很新,虽然我理解代码并且已经移植了几千行,但我自己也是编写Fortran代码的小伙子。
这段代码:

  write(6,'(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)') 'iHyd:',
 &     ih,'; dzdr: ',dzdr,'; tauray:', tauRay,'; zRay: ',
 &     zray,'; ampRay: ',realpart(aray),'+j*',
 &     imagpart(aray),'; qRay: ',qray,'; width :',w

编译正常,但在运行时,程序将退出:

At line 296 of file calcpr.for (unit = 6, file = 'stdout')  
Fortran runtime error: Expected INTEGER for item 15 in formatted transfer, got REAL  
(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)  
   ^  
 q0:    1432.3944878270595     
 nArrayR:                   501 nArrayZ:                   201
iHyd:  1; dzdr: ************; tauray:************; zRay: ************; ampRay:          NaN+j*         NaN
; qRay: 

除了真的很难看之外,它对我来说没有多大意义,因为ìh被声明为integer*8而不是real

那我怎么解决这个问题呢?

3 个答案:

答案 0 :(得分:3)

我在格式声明中计算了6个字符和变量规范,但是你打印了8个。

修改

更好地使用格式声明将是'(A,I3,7(A,E12.8))'

答案 1 :(得分:1)

如果要打印的内容比格式声明中指定的要多,Fortran会“回收”格式。如果一个write语句给出了你不理解的结果,那么为了解决这个问题,删除一次打印的内容可能会有所帮助,直到错误消失为止。

答案 2 :(得分:0)

它表示“第15项”,我会在列表末尾附近,而不是在开头。很明显,“w”和“qray”都被打印为REAL;是其中一个INTEGER?您可能需要更改格式说明符。