Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit ungültigen Eingaben um und lösche Standardeingaben nach „fmt.Scanf()“ in Go?

Wie gehe ich mit ungültigen Eingaben um und lösche Standardeingaben nach „fmt.Scanf()“ in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 07:26:28241Durchsuche

How to Handle Invalid Input and Flush Standard Input After `fmt.Scanf()` in Go?

Stdin nach fmt.Scanf() in Go leeren

Problem: Bei Verwendung von fmt.Scanf() zum Erhalten von Benutzereingaben ist dies möglich Es wird schwierig, mit ungültigen Eingaben effektiv umzugehen. Wenn ein Benutzer nicht numerische Zeichen eingibt, wird die Schleife weiter durchlaufen, was zu einem unerwünschten Erlebnis führt.

Lösung:

Um dieses Problem zu beheben, ist es wichtig, den Inhalt zu leeren stdin (Standardeingabe) nach jeder Eingabeanforderung. Dadurch werden alle verbleibenden ungültigen Zeichen im Eingabepuffer verworfen, wodurch sichergestellt wird, dass die nachfolgende Eingabeanforderung mit einem sauberen Schiefer beginnt.

Lösung mit fmt.Scanln:

Die Funktion fmt.Scanln kann verwendet werden, um eine Zeichenfolge aus stdin zu lesen und automatisch Zeilenumbrüche zu verarbeiten. Durch den Einsatz von fmt.Scanln kann die Schleife vereinfacht werden, ohne dass ein explizites Leeren von stdin erforderlich ist:

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    // Read in an integer
    var userI int
    _, err := fmt.Scanln(&userI)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())
        return
    }
    fmt.Println(userI)
}</code>

Alternative Lösungen:

In Ermangelung einer integrierten stdin-Flushing-Funktion, alternative Lösungen können verwendet werden:

  • Verwendung von io.Discard: Der io.Discard-Wert kann an fmt.Scanf() übergeben werden, um ungültige Eingaben zu verwerfen.
  • Kombination von fmt.Scanf() und bufio: Durch die Kombination von fmt.Scanf() mit dem bufio-Paket kann die ReadString()-Funktion genutzt werden, um eine ganze Eingabezeile zu lesen und ungültige zu verwerfen Zeichen und setzen Sie die Schleife fort.

Fazit:

Während es in Go keine eingebaute stdin-Flushing-Funktion gibt, können Techniken wie die Verwendung von fmt.Scanln oder Alternative Lösungen können ungültige Eingaben effektiv verarbeiten und eine benutzerfreundliche Schleife aufrechterhalten.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit ungültigen Eingaben um und lösche Standardeingaben nach „fmt.Scanf()“ in Go?. 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