我想在fortran 90中使用自动整数宽度描述符。我提到Output formatting: too much whitespace in gfortran
这个问题说我可以使用I0
和F0,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
我是否误解了自动宽度描述符?我应该使用什么选项?
答案 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