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中文网其他相关文章!