有一个程序从命令行读取两个输入:用户名和密码.只有在输入用户名后,才能在控制台中打印字符串"Password:",但在我的程序中,它会立即打印出第一个字符串"Username:".如何解决这个问题?
package main
import (
"bufio"
"os"
"fmt"
)
// A simple program that verifies the user by username and password.
var loginstatus bool
var username, password string
func login(username, password string) bool {
if username == "user123" && password == "pass123" {
return true
} else {
return false
}
}
func main() {
fmt.Print("Username: ")
user := bufio.NewScanner(os.Stdin)
fmt.Print("Password: ")
pass := bufio.NewScanner(os.Stdin)
for user.Scan() && pass.Scan() {
if login(user.Text(), pass.Text()) {
fmt.Println("Signed in.")
os.Exit(3)
} else {
fmt.Println("Incorrect username or password, please try again:")
}
}
}
Run Code Online (Sandbox Code Playgroud)
该行bufio.NewScanner(os.Stdin)
只为stdin创建一个新的扫描程序,它实际上不会进行扫描,也不会阻止等待用户输入.在您Scan
通过"用户名:"和"密码:"打印之前,它实际上不会从标准输入读取.
您可能不需要两个用于用户名和密码的扫描程序.一个扫描仪应该足够你可能想要将"用户名:"和"密码:"的打印移动到for循环中,如果你想再次尝试那么它看起来像这样:
func main() {
scanner := bufio.NewScanner(os.Stdin)
for {
fmt.Print("Username: ")
if !scanner.Scan() {
break
}
user := scanner.Text()
fmt.Print("Password: ")
if !scanner.Scan() {
break
}
pass := scanner.Text()
if login(user, pass) {
fmt.Println("Signed in.")
os.Exit(3)
} else {
fmt.Println("Incorrect username or password, please try again:")
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65 次 |
最近记录: |