Fehler bei der Verwendung von Scanf in GOLang unter Windows
Die Scanf-Funktion in GOLang kann ein Problem darstellen, wenn versucht wird, Benutzereingaben zweimal einzuholen. Die erste Eingabe wird erfolgreich abgerufen, die Funktion bricht jedoch beim zweiten Versuch auf Windows-Systemen abrupt ab. Dieses Verhalten tritt unter macOS nicht auf.
<code class="go">func credentials() (string, string) { var username string var password string fmt.Print("Enter Username: ") fmt.Scanf("%s", &username) fmt.Print("Enter Password: ") fmt.Scanf("%s", &password) return username, password }</code>
Lösung:
Scanf ist eigenartig in der Verwendung von Leerzeichen als Trennzeichen, was die Verwendung etwas schwierig macht. Bufio bietet eine überlegene Alternative, die den Prozess vereinfacht.
<code class="go">func credentials() (string, string) { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter Username: ") username, _ := reader.ReadString('\n') fmt.Print("Enter Password: ") password, _ := reader.ReadString('\n') return strings.TrimSpace(username), strings.TrimSpace(password) // Remove trailing newline character }</code>
Dieser geänderte Code behebt das Problem und funktioniert nahtlos sowohl unter Windows als auch unter macOS.
Das obige ist der detaillierte Inhalt vonWarum schlägt Scanf bei der zweiten Eingabe in Go unter Windows fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!