Ошибка: неотрицательная ширина требуется в строке формата в (1)

Я пытаюсь скомпилировать кусок кода с помощью 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 ответа

Решение

Попробуйте изменить формат строки I в Iw где w это положительное число. То же самое с E, только использовать Ew.d,
Для объяснения см., Например, эту ссылку: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html

Осторожно, хотя: используя, скажем, I3 для выписки 1234 может распечатать ***, поэтому убедитесь, что ваши форматы достаточно широки.

РЕДАКТИРОВАТЬ: См. Ответ @MSB о том, как избежать проблем с целочисленными форматами.

Как уже ответили, вам нужно указать ширину. Нечто подобное ES14.5 может хорошо работать для формата с плавающей запятой. Существует целое сокращение для целочисленного формата: I0 заставит компилятор использовать необходимое количество цифр.

Другие вопросы по тегам