首页  >  文章  >  后端开发  >  Go 中 `fmt.Scanf()` 之后如何处理无效输入并刷新标准输入?

Go 中 `fmt.Scanf()` 之后如何处理无效输入并刷新标准输入?

Susan Sarandon
Susan Sarandon原创
2024-10-27 07:26:28241浏览

How to Handle Invalid Input and Flush Standard Input After `fmt.Scanf()` in Go?

Go 中 fmt.Scanf() 之后刷新 Stdin

问题: 使用 fmt.Scanf() 获取用户输入时,可以有效处理无效输入变得具有挑战性。如果用户输入非数字字符,循环会继续迭代,从而产生不良体验。

解决方案:

要解决此问题,刷新至关重要每个输入请求之后的 stdin(标准输入)。通过这样做,输入缓冲区中任何剩余的无效字符都将被丢弃,确保后续输入请求以干净的状态开始。

使用 fmt.Scanln 的解决方案:

fmt.Scanln 函数可用于从 stdin 读取字符串并自动处理换行符。通过使用 fmt.Scanln,可以简化循环,而不需要显式刷新标准输入:

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    // Read in an integer
    var userI int
    _, err := fmt.Scanln(&userI)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())
        return
    }
    fmt.Println(userI)
}</code>

替代解决方案:

在没有内置的情况下stdin 刷新函数,可以采用替代解决方案:

  • 使用 io.Discard: io.Discard 值可以传递给 fmt.Scanf() 以丢弃无效输入。
  • 结合 fmt.Scanf() 和 bufio: 通过将 fmt.Scanf() 与 bufio 包结合,可以利用 ReadString() 函数读取整行输入,丢弃无效的内容

结论:

虽然 Go 中没有内置的 stdin 刷新函数,但使用 fmt.Scanln 或替代解决方案可以有效处理无效输入并保持用户友好的循环。

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

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