2012-12-12 8 views
5

Scanfを初めて2回使用すると、useres入力が得られますが、2回目はそれを取得して機能から復帰します。これは、Windowsで実行している場合にのみ問題になります。私がMac上で実行すると、最初に期待通りに動作します。まず、ユーザー名とパスワードを確認します。以下は質問のコードです。なぜそれがMacではうまく動作するのですが、Windowsではうまく動作しないのか分かりません。事前に助けていただければ幸いです。ありがとうございました。GOLang Scanfエラー

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 
} 

答えて

12

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 
} 
+0

私は以前にbufioを使ってみましたが、\ nをdillimiterとして使用しているときに空白をトリミングしていませんでした。私は実際にScanfの代わりにScanを使って解決することができました。あなたの答えをありがとう。 – amedeiros