string - print - Lectura de una cadena con espacios en Fortran
print en fortran (2)
El uso de lectura (asterisco, asterisco) en Fortran no parece funcionar si la cadena que se va a leer del usuario contiene espacios. Considera el siguiente código:
character(Len = 1000) :: input = '' ''
read(*,*) input
Si el usuario ingresa la cadena "Hola, mi nombre es John Doe", solo se almacenará en la entrada "Hello"; todo después de que el espacio no se tenga en cuenta. Mi suposición es que el compilador supone que "Hola" es el primer argumento, y que "mi" es el segundo, así que para capturar las otras palabras, tendríamos que usar algo como read ( , ) input1, input2, input3 ... etc. El problema con este enfoque es que necesitaríamos crear matrices de caracteres grandes para cada entrada, y necesitamos saber exactamente cuántas palabras se ingresarán. ¿Hay alguna forma de evitar esto? Alguna función que realmente leerá toda la oración, espacios y todo? ¡Muchas gracias!
En lugar de read(*, *)
, intente read(*, ''(a)'')
. No soy un experto en Fortran, pero el segundo argumento para read
es el especificador de formato (equivalente al segundo argumento para sscanf
en C). *
no significa formato de lista, que no desea. También puede decir a14
si quiere leer 14 caracteres como una cadena, por ejemplo.
character(100) :: line
write(*,''("Enter some text: ",/)'')
read(*,''(A)'') line
write(*,''(A)'') line
end
... leerá una línea de texto de una longitud máxima de 100 (suficiente para la mayoría de los propósitos prácticos) y la escribirá de nuevo. Modificar a tu gusto