【问题标题】:Loop skipping over input in golang循环跳过golang中的输入
【发布时间】:2022-01-12 21:16:33
【问题描述】:

我正在尝试检查输入是否为空白并使用 for 循环再次请求输入,但程序只是反复遍历循环而没有停止等待输入并在其中输出 print 语句 100 次,我做错了什么?

var input string

    for len(input) == 0 {

        fmt.Println("What would you like to write in the journal?")

        input = usr.GetInput()

    }

GetInput 使用 bufio.NewScanner 并返回scanner.Text,但即使我尝试Scanln,错误仍然出现。

编辑:

这里要求的是 GetInput

func GetInput() string {

    scanner := bufio.NewScanner(os.Stdin)

    return scanner.Text()

}

【问题讨论】:

  • len(input) <= 1 导致按下返回意味着 \n 特殊字符,即 1 个符号您可以通过 println(len(input)) 进行检查
  • 如果 GetInput 在每次调用时都调用 bufio.NewScanner,那么 GetInput 会吞下一些输入,返回第一行并丢弃其余的。显示 GetInput 的代码。
  • 或在输入后添加:input = strings.TrimSpace(input)
  • @crispy 需要更多代码,我们无法预测 GetInput 是什么
  • 这不是您使用bufio.Scanner 的方式。看看example in the documentation

标签: go visual-studio-code


【解决方案1】:

我通过使用 fmt.Scanln() 再次尝试使程序正常工作,这一次包括一个指向带有星号的变量的指针,而不是仅仅将变量放在 Scanln 中。

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2013-06-05
    • 1970-01-01
    • 2013-03-25
    • 2021-09-02
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多