I'm learning Fortran90 after a brief introduction to Fortran77 a few years ago. When printing integers in Fortran, you must specify how many spaces you want to reserve for printing the integer. Consider this program...
implicit none
integer :: i
i = 123
write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding
write(*, '(A, I5, A)') "'", i, "'" !5 is too many, so output is padded
write(*, '(A, I2, A)') "'", i, "'" !2 is too few, so output is jibberish
write(*, '(A, I:, A)') "'", i, "'" !Default behavior
end program
...which generates the following output.
'123'
' 123'
'**'
' 123'
How do I allocate the correct amount of space for integer printing when I do not know how many digits are in the integer?
Update: If your compiler is F95-compliant, you can use the I0
edit descriptor (i.e., put '(A, I0, A)'
for the second argument of the write
function in my example above. Thanks @janneb!
write
statements in my example is thefmt
argument, each of which contains 3 edit descriptors. Is my terminology correct? So yeah, the question isn't really about how to use descriptors, it's about what to put after theI
. I can't use a static character string for the format because I don't know beforehand how long the strings will be. Do I understand your response correctly, or is an "IO edit descriptor" different from just any format edit descriptor? – Walloping