6

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

于 2021-06-03T20:20:25.560 回答