登录
首页 >  Golang >  Go问答

Go 程序不等待 scanf 输入

来源:stackoverflow

时间:2024-04-07 10:00:35 473浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《Go 程序不等待 scanf 输入》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我在c中发现了一些类似的问题,但解决方案是c特定的。包主要

这是代码的最小工作示例

import "fmt"

func main() {
  var mode string
  var base int
  for {
    fmt.printf("(base) [-->]: ")
    fmt.scanf("%d", &base)
    fmt.printf("(mode) [-->]: ")
    fmt.scanf("%s", &mode)
  }
}

我的问题是,在请求模式输入后,它不会等待输入,而是立即跳到循环的开头。像这样的事情:

(Base) [-->]: 5
(Mode) [-->]: (Base) [-->]:

解决方案


我遇到了同样的问题,将fmt.scanf("%d", &base)更改为fmt.scanf("%d \n", &base)。我认为它连接到 scanf() 的输出,其中第一个 scanf 不会消耗额外的换行符。上面的代码可能仍然可以在某些设备上运行,没有任何错误。

import "fmt"

func main() {
  var mode string
  var base int
  for {
    fmt.printf("(base) [-->]: ")
    fmt.scanf("%d \n", &base)
    fmt.printf("(mode) [-->]: ")
    fmt.scanf("%s \n", &mode)
  }
}

您可以使用 fmt.scanln(&base) 代替 fmt.scanf("%d", &base)

import "fmt"

func main() {
    var mode string
    var base int
    for {
        fmt.Printf("(Base) [-->]: ")
        fmt.Scanln(&base)
        fmt.Printf("(Mode) [-->]: ")
        fmt.Scanln(&mode)
    }
}

或者 line, _ := bufio.newreader(os.stdin).readstring('\n') 是读取整行的一个很好的替代方案。

对于 fmt.scanf() 输入中的换行符必须与格式中的换行符匹配。

今天关于《Go 程序不等待 scanf 输入》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>