6

Scanf を 2 回使用すると、最初はユーザーの入力が取得されますが、2 回目は取得されず、関数から戻ります。これは、Windows で実行している場合にのみ問題になります。Macで実行すると、最初にユーザーにユーザー名を尋ね、次にパスワードを尋ねると、期待どおりに動作します。以下は問題のコードです。Mac では問題なく動作するのに、Windows では動作しない理由がわかりません。事前にどんな助けでも大歓迎です。ありがとうございました。

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
}
4

2 に答える 2

13

Scanf は、セパレータとしてスペースを使用するという点で少し厄介であり、(少なくとも私にとっては) かなり直感的ではありません。Bufio は、その一部をうまく抽象化しています。

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) // ReadString() leaves a trailing newline character
}
于 2012-12-12T19:10:43.610 に答える