GOLang Scanf错误

时间:2012-12-12 18:47:38

标签: go

第一次使用Scanf时,它会获得useres输入,但第二次不使用,并返回函数。这只是在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
}

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

您需要添加换行符:

package main
import "fmt"

func main() {
   var user, pass string
   fmt.Scanf("%s\n", &user)
   fmt.Println(user)
   fmt.Scanf("%s\n", &pass)
   fmt.Println(pass)
}

或者,您可以只使用 Scanln:

package main
import "fmt"

func main() {
   var user, pass string
   fmt.Scanln(&user)
   fmt.Println(user)
   fmt.Scanln(&pass)
   fmt.Println(pass)
}

https://golang.org/pkg/fmt#Scanln