fortran 90中的自动宽度整数描述符

时间:2015-04-11 00:58:47

标签: fortran gfortran fortran90 fortran95

我想在fortran 90中使用自动整数宽度描述符。我提到Output formatting: too much whitespace in gfortran 这个问题说我可以使用I0F0,0来使用" auto"宽度。 这是我的示例代码(符合GNU Fortran编译器):

PROGRAM MAIN
IMPLICIT NONE

INTEGER :: i
REAL :: j

WRITE (*,*) 'Enter integer'
READ (*,100) i
100 FORMAT (I0)

WRITE (*,*) 'Enter real'
READ (*,110) j
110 FORMAT (F0.0)

WRITE (*,100) 'Integer = ',i
WRITE (*,110) 'Real = ',j

END PROGRAM

存在运行时错误(unit = 5, file = 'stdin') Fortran runtime error: Positive width required in format

我是否误解了自动宽度描述符?我应该使用什么选项?

2 个答案:

答案 0 :(得分:4)

允许使用I0指定最小字段宽度进行输出。对于输入,不允许I0

来自Fortran 2008,10.7.2.1(6)(我的重点):

  

在输出时,通过I,B,O,Z,F和G编辑,字段宽度w的指定值可以为零。在这种情况下,处理器选择最小的正实际字段宽度,该宽度不会导致字段填充星号。 w的指定值在输入时不应为零。

I0没有明确的替代输入,但作为agentp评论,列表导向输入(read(*,*))很简单,可能非常适合您的需求。如果它不是那么你可以查看作为字符变量读入的更一般的解析行。你可以find后者的例子。

答案 1 :(得分:0)

除了@francescalus和@agentp的答案之外,请注意格式标签,例如:应该避免使用100 FORMAT (I0)

相反,只需在format中加入read即可。如果你想读取一个最多8个字符宽的整数READ(*,'(I8)') i

如果你有一个非常冗长的格式或在几行代码中重复使用的格式,请将其保存在字符串中:

character :: form*64
real      :: r1, r2

form = '(es13.6)'  ! e.g. 9.123456e+001

.
.
.

WRITE (*,*) 'Enter a number'
READ (*, form) r1
WRITE (*,*) 'Enter another number'
READ (*, form) r2