Bei Verwendung von fmt.Scanf() zum Lesen von Benutzereingaben in einer Schleife, Es kann zu Problemen kommen, wenn ungültige Eingaben eingegeben werden. Die Eingabe des Benutzers kann über das erwartete Format hinausgehen, was zu mehreren Iterationen der Schleife führt. Dies liegt daran, dass fmt.Scanf() ungültige Eingaben nicht automatisch verwirft, was zu einem kontinuierlichen Strom von Fehlermeldungen führt, bis die gesamte ungültige Eingabe verarbeitet ist.
Eine Lösung, um stdin zu leeren und dieses Problem zu vermeiden, besteht darin, fmt.Scanln() anstelle von fmt.Scanf() zu verwenden. fmt.Scanln() dient zum Lesen einer gesamten Eingabezeile, einschließlich des Zeilenumbruchzeichens. Durch die Verwendung von fmt.Scanln() wird der Eingabevorgang beendet, wenn ein Zeilenumbruchzeichen auftritt, wodurch der Standard-Eingabepuffer effektiv geleert und sichergestellt wird, dass nachfolgende Eingabeversuche mit einem sauberen Slate beginnen.
Hier ist ein Beispiel, das zeigt, wie man fmt.Scanln() verwendet, um den Benutzer zur Ganzzahleingabe aufzufordern und ungültige Eingaben ordnungsgemäß zu verarbeiten:
<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>
In diesem Beispiel lesen wir zunächst die Eingabe des Benutzers als Zeichenfolge mit fmt.Scanln(). Dadurch wird sichergestellt, dass alle ungültigen Zeichen aus dem Eingabepuffer gelöscht werden. Anschließend versuchen wir, den Eingabestring mit fmt.Sscanf() als Ganzzahl zu analysieren. Wenn die Analyse erfolgreich ist, fährt das Programm mit der Verwendung der analysierten Ganzzahl fort. Wenn die Analyse fehlschlägt, wird der Benutzer aufgefordert, die Eingabe erneut einzugeben, wobei alle möglicherweise zuvor eingegebenen ungültigen Eingaben verworfen werden.
Durch Verwendung von fmt.Scanln() zum Lesen des Benutzers Eingabe in einer Schleife können wir die Standardeingabe effektiv leeren und ungültige Eingaben ordnungsgemäß verarbeiten. Dieser Ansatz bietet einen robusteren und zuverlässigeren Eingabeverarbeitungsmechanismus und stellt sicher, dass das Programm den Benutzer weiterhin zu gültigen Eingaben auffordern kann, bis diese eingeholt werden.
Das obige ist der detaillierte Inhalt vonUmgang mit ungültigen Benutzereingaben in Go-Schleifen: Warum ist fmt.Scanln() die Lösung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!