2012-12-12 61 views
5

當第一次使用Scanf兩次時,它獲得useres輸入,但第二次不使用並返回該函數。在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作爲分隔符時修剪空格不工作。我實際上可以通過使用Scan而不是Scanf來解決這個問題。謝謝您的回答。 – amedeiros