解决 Windows 上 Go 中的 Scanf 问题
Go 中的 Scanf 函数因潜在的复杂性而闻名,尤其是在 Windows 系统上。当执行两次使用 Scanf 的程序时,当第二个输入请求未注册时,就会出现问题,导致函数突然终止。
要解决此问题,建议使用 bufio 包,它提供了更用户友好的方式来处理输入和输出操作。下面的代码演示了 bufio 的替代方案:
<code class="go">func credentials() (string, string) { reader := bufio.NewReader(os.Stdin) // Initialize a bufio Reader fmt.Print("Enter Username: ") username, _ := reader.ReadString('\n') // Read the username, discarding any errors fmt.Print("Enter Password: ") password, _ := reader.ReadString('\n') // Read the password return strings.TrimSpace(username), strings.TrimSpace(password) // Remove trailing newline characters }</code>
这里的主要区别是 bufio.NewReader() 的使用,它可以实现更结构化的输入处理。 ReadString() 函数读取用户输入,直到指定的分隔符(在本例中为“n”),从而在不同操作系统之间实现更一致的输入检索。
通过利用这种基于 bufio 的方法,您可以绕过 Scanf 的潜在陷阱并确保可靠的输入处理,无论您的程序是在 Windows 还是 Mac 上执行。
以上是为什么 Scanf 在 Windows 上失败以及如何使用 bufio 修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!