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.
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.
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)
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.
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 }
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!