Maison > Article > développement back-end > Comment gérer les entrées utilisateur non valides dans les boucles Go : pourquoi fmt.Scanln() est la solution ?
Lors de l'utilisation de fmt.Scanf() pour lire les entrées de l'utilisateur en boucle, il peut rencontrer des problèmes si une entrée non valide est saisie. La saisie de l'utilisateur peut s'étendre au-delà du format attendu, entraînant plusieurs itérations de la boucle. En effet, fmt.Scanf() n'écarte pas automatiquement les entrées non valides, ce qui entraîne un flux continu de messages d'erreur jusqu'à ce que l'intégralité de l'entrée non valide soit traitée.
Une solution pour vider stdin et éviter ce problème consiste à utiliser fmt.Scanln() au lieu de fmt.Scanf(). fmt.Scanln() est conçu pour lire une ligne entière d'entrée, y compris le caractère de nouvelle ligne. En utilisant fmt.Scanln(), le processus de saisie se terminera dès qu'il rencontrera un caractère de nouvelle ligne, effaçant ainsi le tampon de saisie standard et garantissant que les tentatives de saisie ultérieures démarrent avec une table rase.
Voici un exemple qui montre comment utiliser fmt.Scanln() pour demander à l'utilisateur une entrée entière et gérer les entrées non valides avec élégance :
<code class="go">package main import ( "fmt" ) func main() { fmt.Println("Please enter an integer: ") var input string fmt.Scanln(&input) var number int _, err := fmt.Sscanf(input, "%d", &number) if err != nil { fmt.Println("Invalid input. Please enter an integer: ") return } fmt.Println("You entered:", number) }</code>
Dans cet exemple, nous lisons d'abord l'entrée de l'utilisateur sous forme de chaîne en utilisant fmt.Scanln(). Cela garantit que tous les caractères non valides sont vidés du tampon d'entrée. En fait, nous essayons d'analyser la chaîne d'entrée sous forme d'entier en utilisant fmt.Sscanf(). Si l’analyse réussit, le programme utilise l’entier analysé. Si l'analyse échoue, elle invite l'utilisateur à saisir à nouveau l'entrée, en supprimant toute entrée non valide qui aurait pu être saisie précédemment.
En utilisant fmt.Scanln() pour lire l'utilisateur entrée dans une boucle, nous pouvons effectivement vider l’entrée standard et gérer les entrées invalides avec élégance. Cette approche fournit un mécanisme de gestion des entrées plus robuste et plus fiable, garantissant que le programme peut continuer à demander à l'utilisateur une entrée valide jusqu'à ce qu'elle soit obtenue.
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!