首页 > 后端开发 > Golang > Go 中处理无效输入时如何刷新标准输入(Stdin)?

Go 中处理无效输入时如何刷新标准输入(Stdin)?

Linda Hamilton
发布: 2024-10-29 02:32:30
原创
342 人浏览过

How to Flush Standard Input (Stdin) in Go When Dealing with Invalid Inputs?

Go 中的刷新标准输入(Stdin)

在 Go 中,当使用 fmt.Scanf() 读取用户输入时,至关重要处理无效输入以防止循环问题。一个常见的挑战是在输入无效条目后无法清除输入缓冲区,从而导致后续输入无法正确解析。这可以通过刷新 Stdin 来解决。

fmt.Scanln()

解决此问题的一种方法是使用 fmt.Scanln(),它会读取完整的来自输入的行。它消耗指定格式说明符后的剩余输入,从而无需显式循环。

<code class="go">func someFunc() {
    fmt.Printf("Please enter an integer: ")

    // Read in an integer
    var i int
    _, err := fmt.Scanln(&i)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())

        // If int read fails, read as string and forget
        var discard string
        fmt.Scanln(&discard)
        return
    }
    fmt.Printf("Input contained %d", i)
}</code>
登录后复制

使用 io.Scanf()

或者,io.Scanf () 可用于从输入中读取特定格式,即使它不完整。如果输入与格式不匹配,则剩余字符将保留在输入缓冲区中。要在发生此类错误后清除缓冲区,请使用:

<code class="go">reader.Reset(reader.Bytes())</code>
登录后复制

其中 reader 是 io.Reader 对象。

其他注意事项

如果如果没有合适的内置函数,请考虑使用自定义函数,该函数会连续读取并丢弃输入,直到到达换行符。这种方法可确保从缓冲区中清除所有剩余输入。

请记住,正确处理无效输入对于稳健的用户交互至关重要。

以上是Go 中处理无效输入时如何刷新标准输入(Stdin)?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板