Heim > Backend-Entwicklung > Golang > Warum wartet fmt.Scanf in Go nicht immer auf Benutzereingaben?

Warum wartet fmt.Scanf in Go nicht immer auf Benutzereingaben?

Barbara Streisand
Freigeben: 2024-12-19 07:49:09
Original
170 Leute haben es durchsucht

Why Doesn't fmt.Scanf Always Wait for User Input in Go?

Verstehen des Problems mit fmt.Scanf in Go

In Go können Sie mit der Funktion fmt.Scanf Benutzereingaben lesen und in angegebenen Variablen speichern. Manchmal stoßen Benutzer jedoch auf ein Problem, bei dem fmt.Scanf nach dem ersten Scan nicht auf Benutzereingaben wartet und sofort mit nachfolgenden Eingabeaufforderungen fortfährt.

Erklärung

In Go liest fmt.Scanf Zeichen von der Standardeingabe bis zum ersten Trennzeichen (normalerweise ein Zeilenumbruch). In früheren Versionen von Go wurde ein Wagenrücklauf (r) gefolgt von einem Zeilenumbruch (n) nicht als gültiges Trennzeichen auf Windows-Systemen berücksichtigt. Dies führte dazu, dass fmt.Scanf vorzeitig beendet wurde, nachdem das erste vom Benutzer eingegebene Zeichen gelesen wurde.

Abhilfe

Um dieses Problem zu beheben, besteht eine einfache Abhilfe darin, explizit das Trennzeichen n in der Formatzeichenfolge zu verwenden an fmt.Scanf übergeben. Zum Beispiel:

var inputSquare float64
fmt.Scanf("%f\n", &inputSquare)
Nach dem Login kopieren

Indem Sie das n in die Formatzeichenfolge einfügen, weisen Sie fmt.Scanf an, auf eine neue Zeile zu warten, bevor die Eingabe als abgeschlossen betrachtet wird. Dadurch wird sichergestellt, dass das Programm anhält, bis der Benutzer die Eingabetaste drückt und seine Eingabe abschließt.

Benutzereingabevalidierung

Um Benutzereingaben für Ganzzahlen zu validieren, können Sie die Funktion strconv.ParseInt verwenden, die prüft, ob Die eingegebene Zeichenfolge kann in eine Ganzzahl geparst werden und gibt alle aufgetretenen Fehler zurück. Zum Beispiel:

inputSquare, err := strconv.ParseInt(inputSquareString, 10, 64)
if err != nil {
    // Handle error
}
Nach dem Login kopieren

Fazit

Durch die Verwendung der oben genannten Technik können Sie das Problem, dass fmt.Scanf in Go nicht auf Benutzereingaben wartet, effektiv angehen und eine ordnungsgemäße Eingabevalidierung für Ganzzahlen implementieren.

Das obige ist der detaillierte Inhalt vonWarum wartet fmt.Scanf in Go nicht immer auf Benutzereingaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage