Estoy aprendiendo Fortran90 después de una breve introducción a Fortran77 hace unos años. Al imprimir números enteros en Fortran, debe especificar cuántos espacios desea reservar para imprimir el número entero. Considere este programa ...Impresión inteligente de números enteros en fortran90
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
... que genera la siguiente salida.
'123'
' 123'
'**'
' 123'
Cómo asigno la cantidad correcta de espacio para la impresión de número entero cuando no sé cuántos dígitos son en el número entero?
actualización: Si su compilador es F95-compatible, puede utilizar el descriptor I0
de edición (es decir, poner '(A, I0, A)'
para el segundo argumento de la función write
en mi ejemplo anterior Gracias @janneb
Si entiendo la terminología correctamente, la segunda El argumento de cada una de las 4 declaraciones 'write' en mi ejemplo es el argumento' fmt', cada uno de los cuales contiene 3 descriptores de edición. rect? Entonces, sí, la pregunta no es sobre cómo usar los descriptores, sino sobre qué poner después del 'I'. No puedo usar una cadena de caracteres estáticos para el formato porque no sé de antemano cuánto tiempo serán las cadenas. ¿Entiendo su respuesta correctamente, o es un "descriptor de edición IO" diferente de cualquier descriptor de edición de formato? –
Vaya. No entendí tu respuesta al principio, ahora veo que estás hablando de un descriptor de edición específico. ¡Utilicé 'I0' como el descriptor de edición y funcionó! Supongo que los compiladores en la máquina que estoy usando son de hecho compatibles con F95. ¡Gracias! –