Heim  >  Artikel  >  Backend-Entwicklung  >  Umgang mit ungültigen Benutzereingaben in Go-Schleifen: Warum ist fmt.Scanln() die Lösung?

Umgang mit ungültigen Benutzereingaben in Go-Schleifen: Warum ist fmt.Scanln() die Lösung?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 18:25:02884Durchsuche

How to Handle Invalid User Input in Go Loops: Why fmt.Scanln() is the Solution?

Eingaben in Go löschen, um eine gültige Benutzerantwort zu erhalten

Verstehen des Problems

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.

Behebung des Problems mit fmt.Scanln()

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.

Beispielverwendung

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.

Schlussfolgerung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn