reader.ReadString ne supprime pas le délimiteur initial
Dans le but de créer un programme qui accueille les utilisateurs nommés Alice ou Bob, un développeur a rencontré un problème où même les noms légitimes déclenchaient une réponse indésirable. Le programme a refusé à tort l'entrée à Alice et Bob.
Le problème
Le problème provient de l'utilisation de reader.ReadString('\n') dans le programme . Cette fonction récupère les caractères jusqu'à ce qu'un caractère de nouvelle ligne soit rencontré. Cependant, il ne supprime pas automatiquement le délimiteur de la chaîne renvoyée, ce qui entraîne l'inclusion d'une nouvelle ligne supplémentaire dans la saisie de l'utilisateur.
Solution
Pour résoudre ce problème , il existe deux approches possibles :
1. Coupez la nouvelle ligne
Utilisez la fonction strings.TrimSpace pour supprimer tout espace de début ou de fin de la chaîne d'entrée avant de l'évaluer. Cela supprime efficacement le caractère de nouvelle ligne à l'origine du problème.
if aliceOrBob(strings.TrimSpace(text)) { fmt.Printf("Hello, ", text) }
2. Utilisez ReadLine au lieu de ReadString
Alternativement, la fonction ReadLine peut être utilisée à la place de ReadString. ReadLine récupère une ligne de texte sans inclure le caractère de nouvelle ligne dans la chaîne renvoyée.
text, _, _ := reader.ReadLine() if aliceOrBob(string(text)) { fmt.Printf("Hello, ", text) }
Explication
La raison de l'utilisation de string(text) avec ReadLine est que ReadLine renvoie une tranche d'octets, tandis qu'aliceOrBob nécessite un argument de chaîne.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3