reader.ReadString no elimina el delimitador inicial
En un esfuerzo por crear un programa que salude a los usuarios llamados Alice o Bob, un desarrollador Encontré un problema en el que incluso los nombres legítimos provocaban una respuesta no deseada. El programa negó incorrectamente la entrada tanto a Alice como a Bob.
El problema
El problema surge del uso de lector.ReadString('\n') en el programa . Esta función recupera caracteres hasta que se encuentra un carácter de nueva línea. Sin embargo, no elimina automáticamente el delimitador de la cadena devuelta, lo que lleva a la inclusión de una nueva línea adicional en la entrada del usuario.
Solución
Para resolver este problema , hay dos enfoques posibles:
1. Recorte la nueva línea
Utilice la función strings.TrimSpace para eliminar cualquier espacio en blanco inicial o final de la cadena de entrada antes de evaluarla. Esto elimina efectivamente el carácter de nueva línea que causó el problema.
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. Utilice ReadLine en lugar de ReadString
Como alternativa, se puede utilizar la función ReadLine en lugar de ReadString. ReadLine recupera una línea de texto sin incluir el carácter de nueva línea en la cadena devuelta.
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
Explicación
La razón para usar una cadena (texto) con ReadLine es que ReadLine devuelve un segmento de bytes, mientras que aliceOrBob requiere un argumento de cadena.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3