Vinage de l'entrée standard (Stdin) dans Go
Dans Go, lorsque vous utilisez fmt.Scanf() pour lire les entrées de l'utilisateur, il est crucial de gérer les entrées non valides pour éviter les problèmes de boucle. Un défi courant est l’incapacité d’effacer le tampon d’entrée après une entrée invalide, ce qui entraîne une analyse incorrecte des entrées suivantes. Cela peut être résolu en vidant Stdin.
fmt.Scanln()
Une méthode pour résoudre ce problème consiste à utiliser fmt.Scanln(), qui lit un fichier complet ligne de l’entrée. Il consomme l'entrée restante après le spécificateur de format spécifié, éliminant ainsi le besoin d'une boucle explicite.
<code class="go">func someFunc() { fmt.Printf("Please enter an integer: ") // Read in an integer var i int _, err := fmt.Scanln(&i) if err != nil { fmt.Printf("Error: %s", err.Error()) // If int read fails, read as string and forget var discard string fmt.Scanln(&discard) return } fmt.Printf("Input contained %d", i) }</code>
Utilisation de io.Scanf()
Alternativement, io.Scanf () peut être utilisé pour lire un format spécifique à partir de l'entrée, même s'il est incomplet. Si l'entrée ne correspond pas au format, les caractères restants sont laissés dans le tampon d'entrée. Pour vider le tampon après une telle erreur, utilisez :
<code class="go">reader.Reset(reader.Bytes())</code>
où reader est l'objet io.Reader.
Autres considérations
Si aucune fonction intégrée ne convient, envisagez d'utiliser une fonction personnalisée qui lit et rejette en permanence les entrées jusqu'à ce qu'une nouvelle ligne soit atteinte. Cette approche garantit que toutes les entrées restantes sont effacées du tampon.
N'oubliez pas qu'une gestion appropriée des entrées non valides est essentielle pour des interactions utilisateur robustes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!