第一次使用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
}
答案 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)
}