错误:在格式字符串中需要非负宽度,位于(1)处。

6

我正在尝试使用gfortran编译一段代码,但它出现以下错误:

Error: Nonnegative width required in format string at (1)
../src/powmes.f90:410.20:
     write(lunit,'(I,E,E,E)') wavenum(k),power(k),nmodes(k),errorexpan(k)

414   if (filepower_fold(1:1) /= '#') then
415      fileout=trim(filepower_fold)//'.waven'
416      if (verbose) write(*,*) 'Output '//trim(fileout)
417      open(file=fileout,form='formatted',status='unknown',unit=lunit,err=2)
418      do k=0,ngrid/2
419         do ifold=0,nfoldpow-1
420            write(lunit,'(I,$)') waven(k,ifold)
421         enddo
422         write(lunit,'(I)') waven(k,nfoldpow)
423      enddo
424      close(lunit)

我该怎么编译这个代码?
2个回答

10

如前所述,您需要指定宽度。类似ES14.5的浮点格式可能效果很好。对于整数格式,有一个快捷方式:I0将导致编译器使用所需的数字位数。


8
使用gfortran编译器,我会毫不犹豫地同时使用g0格式。 - Vladimir F Героям слава
1
@VladimirF,感谢您的建议!它最终在我的类似问题上帮了我很多:http://stackoverflow.com/q/19503960/289099 - pattivacek
@VladimirF,你认为g0能帮助解决这个问题吗:https://dev59.com/vAb4s4cB2Jgan1znkGcV??`g0`是编译器选项还是必须包含在源代码本身中的内容? - user32882
1
该程序使用扩展功能 - 省略I的宽度并使用$格式(可抑制换行符)。G0是标准Fortran 2003。它在F2008中被扩展以允许G0.d,并在F2018中再次扩展以允许与字符值一起使用。 - Steve Lionel

8
尝试将格式字符串更改为,其中是正数。对于,做同样的操作,只需使用。请参见此链接以获取详细解释:http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html
但要注意:例如,使用写出1234可能会打印出***,因此请确保您的格式足够宽。
编辑:请参阅@M.S.B.的答案以避免整数格式的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接