我在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)
}
}
对于
fmt.Scanf()
输入中的换行符必须与格式中的换行符匹配。