我目前正在将应用程序从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
。
那我怎么解决这个问题呢?
答案 0 :(得分:3)
我在格式声明中计算了6个字符和变量规范,但是你打印了8个。
修改强>
更好地使用格式声明将是'(A,I3,7(A,E12.8))'
答案 1 :(得分:1)
如果要打印的内容比格式声明中指定的要多,Fortran会“回收”格式。如果一个write语句给出了你不理解的结果,那么为了解决这个问题,删除一次打印的内容可能会有所帮助,直到错误消失为止。
答案 2 :(得分:0)
它表示“第15项”,我会在列表末尾附近,而不是在开头。很明显,“w”和“qray”都被打印为REAL;是其中一个INTEGER?您可能需要更改格式说明符。