gpt4 book ai didi

go - Go中字符串的顺序输出和输入

转载 作者:IT王子 更新时间:2023-10-29 00:58:26 26 4
gpt4 key购买 nike

有一个程序从命令行读取两个输入:用户名和密码。字符串“密码:”应该只在输入用户名后打印在控制台中,但在我的程序中它会立即与第一个字符串“用户名:”一起打印。如何解决这个问题?

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:")
}
}
}

最佳答案

bufio.NewScanner(os.Stdin) 只是为 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:")
}
}
}

关于go - Go中字符串的顺序输出和输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43539415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com