首页  >  文章  >  后端开发  >  为什么 Windows 上的 Go 第二次输入时 Scanf 失败?

为什么 Windows 上的 Go 第二次输入时 Scanf 失败?

DDD
DDD原创
2024-10-26 11:14:29558浏览

Why Does Scanf Fail on Second Input in Go on Windows?

在 Windows 上的 GOLang 中使用 Scanf 时出错

GOLang 中的 Scanf 函数在尝试两次获取用户输入时可能会出现问题。第一次输入已成功检索,但在 Windows 系统上第二次尝试期间该函数突然终止。此行为在 macOS 上不会发生。

<code class="go">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
}</code>

解决方案:

Scanf 的特殊之处在于它使用空格作为分隔符,这使得使用起来有些困难。 Bufio 提供了一种简化流程的卓越替代方案。

<code class="go">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) // Remove trailing newline character
}</code>

此修改后的代码解决了该问题,并在 Windows 和 macOS 上无缝运行。

以上是为什么 Windows 上的 Go 第二次输入时 Scanf 失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn