Fortran 错误:在(1)处的格式字符串中需要非负宽度

Fortran 错误:在(1)处的格式字符串中需要非负宽度,fortran,gfortran,Fortran,Gfortran,我试图用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

我试图用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)

如何编译此文件?

尝试将格式字符串
I
更改为
Iw
,其中
w
为正数。与
E
相同,仅使用
Ew.d

有关说明,请参见以下链接:

不过要小心:比如说,使用I3写出1234可能会打印出
***
,所以要确保格式足够宽


编辑:请参阅@M.S.B.关于如何避免整数格式问题的答案。

正如前面所回答的,您需要指定宽度。类似ES14.5的东西可能适合浮点格式。整数格式有一条捷径:I0将使编译器使用所需的位数。

对于gfortran,我会毫不犹豫地使用
g0
格式来实现这两种格式。@VladimirF,谢谢你的建议!这最终帮助我解决了一个类似的问题:@VladimirF你认为
g0
能帮我解决这个问题吗:??
g0
是编译器选项还是必须包含在源代码中的东西?此程序使用扩展名-省略I的宽度,并使用$格式(这会抑制换行)。g0是标准的Fortran 2003。它在F2008中被扩展为允许使用G0.d,并再次扩展为允许在F2018中使用字符值。