Heim >Backend-Entwicklung >Golang >Warum schlägt Scanf bei der zweiten Eingabe in Go unter Windows fehl?

Warum schlägt Scanf bei der zweiten Eingabe in Go unter Windows fehl?

DDD
DDDOriginal
2024-10-26 11:14:29642Durchsuche

Why Does Scanf Fail on Second Input in Go on Windows?

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!

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